2016-02-25 96 views
-2

我有這個疑問...計數,函數返回空記錄集需要返回0,而不是

SELECT COUNT(*) AS dupes 
FROM documents d JOIN mv_compgift g ON g.documentId = d.id 
    JOIN mv_donorid di ON di.documentId = d.id 
    JOIN mv_appealcode ac ON ac.documentId = d.id 
GROUP BY di.value,ac.value,d.dateDeleted 
HAVING COUNT(*) > 1 
AND g.value = 'Y' 
AND d.dateDeleted IS NULL 
AND di.value = '0621839010' 
AND ac.value = 'AD62Q' 

我需要它顯示爲0時,我有一個空的記錄集。

我看了,並嘗試不同的功能,如coalesce,但沒有作品...請幫助。感謝

+0

當數據集爲空時,它不能顯示0。沒有要計數的行。 ISNULL或COALESCE不會幫助,因爲你沒有行。 –

+0

請將代碼複製並粘貼到問題中,縮進4個字符(標記代碼並按Ctrl + K或Cmd + K縮進)。 –

+0

您每個組都返回一個計數,但組中沒有其他值,您希望此查詢完成的操作是什麼? –

回答

2
DECLARE @Count INT 

SELECT @Count=COUNT(*) AS dupes 
FROM documents d JOIN mv_compgift g ON g.documentId = d.id 
    JOIN mv_donorid di ON di.documentId = d.id 
    JOIN mv_appealcode ac ON ac.documentId = d.id 
GROUP BY di.value,ac.value,d.dateDeleted 
HAVING COUNT(*) > 1 
AND g.value = 'Y' 
AND d.dateDeleted IS NULL 
AND di.value = '0621839010' 
AND ac.value = 'AD62Q' 

SELECT ISNULL(@Count,0) AS [dupes] 
+1

如果它是一個程序,這很好。如果使用count,我不會聲明bigint。計數函數返回一個整數,如果它是一個更大的數字,你將需要使用COUNT_BIG。 –

+0

我不知道。根據記錄數據,絕不會觸及幾乎那麼大的事物。 – UnhandledExcepSean

1
SELECT 
    COUNT(*), -- raw value 
    CASE COUNT(*) 
     WHEN 1 THEN 'OK' WHEN 0 THEN 'NOTHING' ELSE 'DUPS' 
    END as HasDups -- translated value 
FROM documents d JOIN mv_compgift g ON g.documentId = d.id 
    JOIN mv_donorid di ON di.documentId = d.id 
    JOIN mv_appealcode ac ON ac.documentId = d.id 
WHERE g.value = 'Y' AND d.dateDeleted IS NULL 
    AND di.value = '0621839010' AND ac.value = 'AD62Q' 

HAVING條件是消除不具有的DUP組。沒有辦法得到回零。

另外我很驚訝g.value過濾器沒有錯誤。無論如何,所有這些條件似乎屬於WHERE而不是HAVING

+0

這仍然有可能不返回任何行。 –

+0

@肖恩如此如此?當沒有行時,Count()總是返回一個零。注意我已經刪除了「GROUP BY」。 – shawnt00

+0

Ahhh沒有注意到你通過......沒有注意到......在這裏看不到任何東西。 –