Kniffliges Problem mit DBChart...



  • Da mein Query bei einer Nullstelle ja keine Ereignisart findet, kann er ja auch keine Null angeben. In meinem Beispiel sind ja gerade mal 5 Ereignisarten zu erkennen. Die DB führt aber 12 unterschiedliche Arten. Und genau das ist wohl das Problem an der Sache.
    Woher soll den Bar2 wissen, dass Bar1 5 Ereignisse, und nicht nur 4 Ereignisse gefunden hat?



  • Indem du zuerst die 12 Ereignisarten in deine from-Klausel verwendest und dann die beiden "Ergebnisrelationen" in einem left outer join dranbindest. dann sollten zumindest die 12 Arten kommen.
    Dann kannst du das in einen weiteren Statement kapseln der aus Nullwerten 0 macht.
    Wenn du zeigst was du hast können wir dir evtl konkret helfen.



  • Hi,
    ok, das sind wohl zu wenige Infos 😞 Ich werde Montag dann die Infos nachreichen.

    Gruß Torsten



  • Hi zusammen,

    witte schrieb:

    ...Wenn du zeigst was du hast können wir dir evtl konkret helfen.

    Und hier jetzt die Fakten:
    Ich habe erst einmal die Tabelle 't_Eingabe'. In diese Tabelle wird nun das Ereignis eingetragen (Unfall, ASIG, etc.). Dieses Ereignis bekommt eine ID. Dieser ID sind unter Umständen in der Tabelle 't_Massnahme' ein oder auch mehrere Maßnahmen zugeordnet. Also eine 1:n Beziehung. Diese Maßnahmen haben ein Feld 'Zieltermin' und ein Feld 'Datum_erledigt'.

    Hier sollen jetzt in Bar1 des DBChart alle offenen Maßnahmen angezeigt werden und nach Ereignisart gruppiert werden:

    SELECT e.Ereignis, COUNT(e.Ereignis)as Anzahl 
    FROM t_eingabe AS e INNER JOIN 
    t_massnahme AS m ON e.ID = m.Massnahme_ID 
    where m.Datum_erledigt is NULL 
    group by e.Ereignis
    

    Soweit geht das auch. Nun gehe ich einen Schritt weiter und möchte mir aus diesen beiden Tabellen die Maßnahmen anzeigen lassen, die noch offen sind UND wo der Zieltermin überschritten wurde. Diese Daten sollen mir im gleichen DBChart, allerdings als zweite Serie angezeigt werden. Hier nun der SQL-String:

    SELECT e.Ereignis, COUNT(e.Ereignis) as Anzahl
    FROM t_eingabe AS e INNER JOIN
    t_massnahme AS m ON e.ID = m.Massnahme_ID
    where m.Zieltermin <'12.03.2010' and m.Datum_erledigt is NULL
    group by e.Ereignis
    

    Wobei zu erwähnen ist, dass ich das Datum des Zieltermins mittels Parameter übergebe.

    Das Problem an der Sache ist nun folgendes. Wenn ich nun im Ergebnis der Serie2 unter der Ereignisart "PB" keine Überfällige Maßnahme habe, rutschen die folgenden Werte im DBChart eine Stelle nach oben und wird im falschen Ereignis grafisch dargestellt (das Ergebnis dieser Abfragen habe ich oben mal dargestellt).

    Wie bekomme ich nun diesen "Anzeigefehler" behoben???

    Schönen Gruß
    Torsten



  • /Edit: Statement ist falsch.



  • Schau dir mal folgendes Stmt an:

    SELECT Ereignis,COALESCE(t1anz, 0) AS t1anz,COALESCE(t2anz, 0) AS t2anz
    FROM (
    SELECT e.Ereignis,t1.anz AS t1anz,t2.anz AS t2anz
    FROM (SELECT DISTINCT Ereignis FROM t_eingabe) AS e
    LEFT JOIN (
     SELECT e.Ereignis,COUNT (*) AS anz 
     FROM t_massnahme m JOIN t_eingabe e ON e.ID = m.Massnahme_ID 
     WHERE Datum_erledigt is NULL 
     GROUP BY e.Ereignis
    ) t1 ON t1.Ereignis=e.Ereignis
    LEFT JOIN (
     SELECT e.Ereignis,COUNT (*) AS anz 
     FROM t_massnahme m JOIN t_eingabe e ON e.ID = m.Massnahme_ID 
     WHERE Datum_erledigt is NULL AND m.Zieltermin <'12.03.2010'
     GROUP BY e.Ereignis
    ) t2 ON t2.Ereignis=e.Ereignis
    )v
    ORDER BY Ereignis
    

    * ich habe im inneren Statement zuerst die Ereignistypen isoliert (SELECT DISTINCT Ereignis FROM t_eingabe)
    * dann deine beiden Statements daran gebunden
    * im äußeren Stmt die NULL-Werte in 0 gewandelt



  • Hi witte,

    danke erst einmal. Kann ich leider erst morgen testen.
    Werde mich dann melden...

    Gruß Torsten



  • Hi witte,
    so, ich habe Deinen SQL-String verwendet. Sieht echt gut aus. Bis auf eine kleine Sache. Ich bekomme als Ergebnis der Abfrage leider auch Ereignisse mit 0-Werten angezeigt. Sieht dann so aus:

    Ereignis | t1anz | t2anz
    ------------------------
    Audit ext|   0   |   0
    Audit int|   2   |   1
    ASIG     |   2   |   2
    ProdBesp |   0   |   0
    Unfall   |   4   |   1
    

    Bei den Ereignissen 'Audit ext' und 'ProdBesp' steht ja in beiden Feldern eine 0. Kann man diese denn auch ausblenden?

    SG
    Torsten



  • na dann mach doch noch ein

    WHERE COALESCE(t1anz, 0) + COALESCE(t2anz, 0) > 0
    

    vor dem ORDER BY.



  • Hey witte,

    für heute bist Du mein Held 👍 👍 👍

    Es funktioniert genau so, wie es sein soll 😃

    VIELEN DANK 👍


Anmelden zum Antworten