2016-05-13 51 views
0

說我有一張表,其中一列是GroupName。每行能有此列三個值中的一個:A,B,或C,如果我想查詢多少每組對象我的數據庫,我可以運行這樣的事情:SQL - 如何返回0的計數

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

這裏的我的問題:然而

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

,我:如果,例如,我有100名對象中的表,和75在B A 25 0 C,如果我運行此查詢將返回該試圖使用此查詢來填充SSRS表以顯示金額,並且此表需要顯示所有可能的組,而不僅僅是實際使用的組。在這個例子中,我仍然需要C表中的第三行。如果行在那裏,我知道如何放置0,例如=IIf(Fields!c.Value = Nothing, "0", Fields!c.Value),但在上面的例子中,它甚至不創建行。我如何確保爲每個值創建一行,即使所述值未被使用?

回答

2

要知道你有一組C,那一定是在你的表中的一個,所以你需要做這樣的事情:

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

外申請使用WHERE子查詢可以過濾..或者你應該只使用LEFT JOIN而不是 – JamieD77

+0

這對我有效,謝謝 – thnkwthprtls

+0

@thnkwthprtls我們必須有不同的編譯器:) – JamieD77