下面是測試表中的示例數據我有計數空值在SQL與其中和基團通過子句
[childId] [parentId] [present]
1 10 0
2 11 1
3 NULL 0
4 NULL 0
NULL 10 0
現在,對於所有的parentIds(包括那些具有NULL)我要計數的所有本childIds
select parentId, count(childId) as nbr
from TestTable
where present=1 or parentId is NULL
group by parentId
結果我得到的是
parentId nbr
NULL 2
11 1
同樣的計數次數(nbr
)我得到當前= 1和當前= 0。看來我不能爲NULL
分組值賦予一個條件。
我在做什麼錯誤以及我想要做什麼解決方案?
UPDATE:
由於測試情況下,我給了不具代表性,直到我重新創建更好的辦法的實際情況,我會盡力解釋我所面臨的問題。
我創建了一個全外連接的視圖,所以我有一些NULL
爲childId
的記錄,有些記錄爲parentId
的NULL
。
現在,我想列出所有parentId
值(包括NULL
和非NULL
),併爲它們中的每一個計數所有記錄,例如,具有present=1
。 如果我使用where present=1
條件,它將從結果集中消除NULL值,即對於parentId|nbr
,我將不會得到結果記錄NULL|x
。
我用union all
解決了這個問題。在第一選擇我有where present=1
和第二選擇我有where present=1 and parentId is NULL
。
select parentId, count(childId) as nbr
from TestTable
where present=0
group by parentId
union all
select parentId, count(childId) as nbr
from TestTable
where present=0 and parentId is NULL
group by parentId
結果我得到的是
[parentId] [nbr]
NULL 2
10 1
NULL 2
這個唯一的問題(除了爲parentId=NULL
複製的記錄),就是如果有與parentId=NULL
和present=1
沒有記載,因此我不會有記錄NULL | 0
爲parentId|nbr
,我想列出所有parentIds,NULL
而不是NULL
。
所以總結起來,我需要有輸出的格式爲present=1
[parentId] [nbr]
NULL 0
10 0
11 1
和這一個present=0
[parentId] [nbr]
NULL 2
10 2
11 0
任何幫助嗎?
,如果你只是跳過看是空的,並且說'SELECT parentid,COUNT(*)AS nbr FROM TestTable WHERE present = 1 GROUP BY parentid',結果與你想要的有什麼不同? – 2012-03-26 11:49:22
我試圖模擬這個測試樣本的真實情況,但現在我發現我沒有給出正確的示例和測試數據。 – 2012-03-26 11:51:05
如果你想顯示NULL Parent,並顯示它們有0或1,你只需將當前列添加到你的組中。查看我的更新回答 – cairnz 2012-03-27 11:18:18