2016-05-13 10 views
0

Angenommen, ich habe eine Tabelle, und eine der Spalte ist GroupName. Jede Reihe kann für diese Spalte einen von drei Werten haben: A, B oder C. Wenn ich abfragen wollen, wie viele Objekte von jeder Gruppe in der Datenbank sind, habe ich so etwas wie dieses laufen kann:SQL - Zurückgeben einer Anzahl von 0

SELECT COUNT(*) c, GroupName 
FROM MyTable 
GROUP BY GroupName 

Hier mein Problem: wenn ich zum Beispiel 100 Objekte in der Tabelle habe, und 75 sind in A 25 in B und 0 in C, wenn ich diese Abfrage ausführen wird es diese zurück:

GroupName c 
-------------- 
A   75 
B   25 

aber ich bin versuchen, diese Abfrage zu verwenden, um eine SSRS-Tabelle zu füllen, um die Beträge anzuzeigen, und diese Tabelle muss alle möglichen Gruppen anzeigen, nicht nur die tatsächlich verwendeten Gruppen. In diesem Beispiel würde ich noch eine dritte Zeile in meiner Tabelle für C benötigen. Wenn die Zeile dort war, weiß ich, wie man eine 0 einfügt, zB =IIf(Fields!c.Value = Nothing, "0", Fields!c.Value), aber im obigen Beispiel erstellt sie nicht einmal eine Zeile. Wie kann ich sicherstellen, dass für jeden Wert eine Zeile erstellt wird, auch wenn dieser Wert nicht verwendet wird?

Antwort

2

Um noch wissen, dass Sie eine Gruppe C haben, die in einem Ihrer Tabellen sein müssen, so dass Sie so etwas wie dies tun müssen:

select X.c, G.GroupName 
from 
groups G 
outer apply (
    SELECT COUNT(*) c, GroupName 
    FROM MyTable 
    GROUP BY GroupName 
) X on X.GroupName = G.GroupName 
+0

äußeren Anwendung können mit WHERE in der Unterabfrage filtern .. oder du solltest einfach LEFT JOIN anstelle von – JamieD77

+0

verwenden Das funktionierte für mich, danke – thnkwthprtls

+0

@ thnkwthprtls wir müssen einen anderen Compiler haben :) – JamieD77

Verwandte Themen