none
SSRS 2008: Query liefert nicht die erwarteten Gruppierungen RRS feed

  • Frage

  • Hallo,
    ich habe aktuell ein Problem mit einer Abfrage in SSRS 2008, die nicht das zurückliefert,
    was ich erwarten würde.
    Die Abfrage lautet wie folgt:

    SELECT     '> 1 Mon' AS Dauer, COUNT(*) AS Anzahl, 1 AS Position, MONTH(C.TheDate) AS Monat, B.Abteilungen
    FROM         nSupportauftrag AS A RIGHT OUTER JOIN
                          wAbschlußdatum AS C ON A.Abschlußdatum = C.TheDate RIGHT OUTER JOIN
                          nAbteilung AS B ON A.Abteilung = B.Abteilungen
    WHERE     (A.Debitornr_ NOT IN ('10101', 'XYZ')) AND (A.Status = '4-ENDE') AND (A.Nettoarbeitstage BETWEEN 20 AND 40) AND (A.[Resource Group No_] <> '') AND 
                          (A.HotlineMitarbeitercode NOT IN ('John', 'Jim', 'Bert')) AND (YEAR(C.TheDate) = YEAR(@StartDate))
    GROUP BY ALL B.Abteilungen, MONTH(C.TheDate)
    ORDER BY Monat
    

    Dabei enthält die Tabelle nAbteilung eine Auflistung aller Abteilungsleiter (ein knappes Dutzend nur), und die Tabelle wAbschlußdatum ist eine Datumstabelle mit allen Daten in einem gewissen Zeitraum (damit auch alle Monate wirklich verfügbar sind).
    Ich erwarte eigentlich, das mir zu jeder Abteilung alle Monate des aktuellen Jahres zurückgegeben werden, unabhängig davon, ob in der Tabelle nSupportauftrag tatsächlich Zeilen dazu exisiteren (die werden dann halt mit null ausgegeben).
    Funktioniert auch, wenn ich nur die Tabelle nAbteilung oder wAbschlußdatum hinzufüge, beide aber zusammen gehen nicht.
    Hier mein Ergebnis (Ausgehend von 2 Abteilungen, wobei Abteilung 1 keine Werte in nSupportauftrag erhält):

    > 1 Mon	0	1	NULL	Abteilung1
    > 1 Mon	9	1	1	Abteilung2
    > 1 Mon	6	1	2	Abteilung2
    > 1 Mon	10	1	3	Abteilung2
    > 1 Mon	7	1	4	Abteilung2
    > 1 Mon	14	1	5	Abteilung2
    > 1 Mon	8	1	6	Abteilung2
    > 1 Mon	3	1	7	Abteilung2
    > 1 Mon	5	1	8	Abteilung2
    > 1 Mon	0	1	9	Abteilung2
    > 1 Mon	2	1	10	Abteilung2
    > 1 Mon	1	1	11	Abteilung2
    > 1 Mon	0	1	12	Abteilung2

    Was ich aber eigentlich erwarte wäre das hier:

    > 1 Mon	0	1	1	Abteilung1
    > 1 Mon	0	1	2	Abteilung1
    > 1 Mon	0	1	3	Abteilung1
    > 1 Mon	0	1	4	Abteilung1
    > 1 Mon	0	1	5	Abteilung1
    > 1 Mon	0	1	6	Abteilung1
    > 1 Mon	0	1	7	Abteilung1
    > 1 Mon	0	1	8	Abteilung1
    > 1 Mon	0	1	9	Abteilung1
    > 1 Mon	0	1	10	Abteilung1
    > 1 Mon	0	1	11	Abteilung1
    > 1 Mon	0	1	12	Abteilung1
    > 1 Mon	9	1	1	Abteilung2
    > 1 Mon	6	1	2	Abteilung2
    > 1 Mon	10	1	3	Abteilung2
    > 1 Mon	7	1	4	Abteilung2
    > 1 Mon	14	1	5	Abteilung2
    > 1 Mon	8	1	6	Abteilung2
    > 1 Mon	3	1	7	Abteilung2
    > 1 Mon	5	1	8	Abteilung2
    > 1 Mon	0	1	9	Abteilung2
    > 1 Mon	2	1	10	Abteilung2
    > 1 Mon	1	1	11	Abteilung2
    > 1 Mon	0	1	12	Abteilung2

    Was mache ich hier falsch in der Abfrage, oder geht das überhaupt so, wie ich mir das vorstelle.
    Danke schonmal im Vorraus für Hilfe.





     

    Dienstag, 9. Februar 2010 08:29

Antworten

  • Du verwendest in der WHERE-Klausel Felder der ersten Tabelle aus dem Right Outer Join.
    Zum Beispiel A.Status = '4-ENDE' schliesst die Felder mit NULL aus. Du solltest also die Abfrage mit ISNULL oder COALESCE ergänzen.

    Coalesce(A.Status,'4-ENDE')  = '4-ENDE'

    Einen schönen Tag noch, Christoph Muthmann Microsoft SQL Server MVP, http://www.insidesql.org
    • Als Antwort markiert Goblin187 Donnerstag, 11. Februar 2010 15:53
    Donnerstag, 11. Februar 2010 14:18

Alle Antworten

  • Du verwendest in der WHERE-Klausel Felder der ersten Tabelle aus dem Right Outer Join.
    Zum Beispiel A.Status = '4-ENDE' schliesst die Felder mit NULL aus. Du solltest also die Abfrage mit ISNULL oder COALESCE ergänzen.

    Coalesce(A.Status,'4-ENDE')  = '4-ENDE'

    Einen schönen Tag noch, Christoph Muthmann Microsoft SQL Server MVP, http://www.insidesql.org
    • Als Antwort markiert Goblin187 Donnerstag, 11. Februar 2010 15:53
    Donnerstag, 11. Februar 2010 14:18
  • Danke für die Antwort.

    Ich hatte das Problem mittlerweile anderweitig gelöst,
    werde das hier aber definitiv noch ausprobieren, da mir meine Lösung selbst nicht so gefiel.
    Donnerstag, 11. Februar 2010 15:53