Benutzer mit den meisten Antworten
SSRS 2008: Query liefert nicht die erwarteten Gruppierungen

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.
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
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