2016-02-25 95 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没有注意到你通过......没有注意到......在这里看不到任何东西。 –