Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server Count函数返回空记录集,但需要它返回0_Sql Server - Fatal编程技术网

Sql server Count函数返回空记录集,但需要它返回0

Sql server Count函数返回空记录集,但需要它返回0,sql-server,Sql Server,我有这个疑问 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

我有这个疑问

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,但没有任何效果…请帮助。谢谢

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]
您的
情况是排除了没有DUP的组。根本不可能得到零分


另外,我很惊讶
g.value
过滤器上没有出现错误。所有这些条件似乎都属于
的WHERE
,而不是
的have

当数据集为空时,它不能显示0。没有要计数的行。ISNULL或COALESCE也不会有帮助,因为您没有行。请将代码复制并粘贴到问题中,缩进4个字符(标记代码并按Ctrl+K或Cmd+K缩进)。您将返回每个组的计数,但不返回组中的任何其他值,您希望此查询具体执行什么操作?它将查找重复项并返回表中的所有行。但是,如果没有任何复制品,它不会返回任何东西,但我需要它返回一些东西。我的应用程序错误当没有返回任何内容时,它会检查大于1的行。它需要返回一个数字。我不知道如何解释这一点。当没有行时,逻辑上无法返回0,因为没有行。为什么不检查一下你的网络代码中是否存在行呢?如果(MyRecordSet.Rows.Count==0)…这是一个过程,则效果很好。如果使用count,我不会声明bigint。count函数返回一个int,如果它是一个更大的数字,您需要使用count\u BIG。我不知道这一点。就计数记录而言,永远不要点击任何接近如此大的数据。这仍然有可能不会返回任何行。@Sean怎么会这样<当没有行时,code>Count()将始终返回零。请注意,我已删除了
分组依据
。啊哈,没有注意到您删除了分组依据…无需担心…此处无任何内容。
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'