计数返回空白,而不是0

问题描述:

良好的一天,每个人都在这里是我的代码计数返回空白,而不是0

SELECT 
    'Expired Item -'+ DateName(mm,DATEADD(MM,4,AE.fld_LOAN)) as [Month] 
    ,COUNT(PIT.fld_ID)'COUNT' 
    ,SUM (PIT.fld_GRAM)'GRAMS' 
    ,SUM (PH.fld_AMNT)'PRINCIPAL' 
FROM #AllExpired AE 
    INNER JOIN Transactions.tbl_ITEM PIT 
    ON AE.fld_MAINID=PIT.fld_MAINID 
    INNER JOIN Transactions.tbl_HISTO PH 
    ON AE.fld_MAINID =PH.fld_MAINID 
GROUP BY DATENAME(MM,(DATEADD(MM,4,AE.fld_LOAN))) 

我所面临的问题是,我计数函数不返回0,如果它没有价值,总和功能如果没有检索到结果值,则不会返回NULL,而只是输出空白,为什么会这样呢?我该如何解决它?

这里是样本输出

A

的屏幕截图ofcourse这不是我想要的我希望它输出零和空值。请帮助我,我不知道什么是错的。谢谢。

+2

您希望在“Month”列中出现什么值 - SQL Server是否必须神奇地为此创建一个值? –

+1

但是,如果有* no *行要处理 - 所需结果的条件是0 - 计算它的起始条件是什么? –

+0

ohhh我现在看到我明白了:)谢谢@Damien_The_Unbeliever你再次帮助我这次:) – user2705620

你不能指望使用时,可以输出任何记录GROUP BY子句中,当源中不存在任何记录时。

如果您希望SUM和COUNT函数的输出为0,则不应使用GROUP BY。

原因是当你没有记录时,GROUP BY子句没有任何东西可以分组,然后也不能给你任何输出。

例如:

SELECT COUNT(*) FROM (SELECT 'Dummy' AS [Dummy] WHERE 1 = 0) DummyTable 

会返回一个记录,其值为 '0',其中为:

SELECT COUNT(*) FROM (SELECT 'Dummy' AS [Dummy] WHERE 1 = 0) DummyTable 
GROUP BY [Dummy] 

将返回任何记录。

+0

为什么我使用GROUP BY的原因是因为这个错误 '消息8120,级别16,状态1,行2列 “#AllExpired.fld_LoanDate”在选择列表中无效,因为它不包含的在集合函数或GROUP BY子句中.' 任何建议?如何使用group by删除错误? – user2705620

+0

那么,如果您想要每个贷款日期月的总计数,克数和本金列表,则无法删除GROUP BY子句。一个丑陋的解决方法,如果你想你的原始查询返回一个0的行,当没有记录时,是添加类似这样的查询:'UNION SELECT NULL AS [Month],0 AS [COUNT],0 AS [GRAMS],0 AS [PRINCIPAL] WHERE(SELECT COUNT(*)FROM #AllExpired)= 0',但更好的解决方案是让您的应用程序处理原始查询而不返回任何行。 – Dan

+0

还有其他解决此问题的方法,当结果为NULL时,还可以对每个字段使用'COALESCE'来返回0。或者使用相关的子查询以确保总是返回“*”数据,任何聚合函数将返回0. – Tony

也许#AllExpired为空,其中一个连接返回无结果?

记住内部连接需要在双方都返回结果,因为#AllExpired是空的连接不会返回任何内容。

将其更改为外部连接。

+0

是的,它是空的,好吗?它不应该输出零?当我使用函数计数>? – user2705620

我可以想象你需要改变内蒙古您加入到OUTER确保即使存在tbl_PawnItem没有相应的记录行返回 -

SELECT 
    'Expired Item -'+ DateName(mm,DATEADD(MM,4,AE.fld_LoanDate)) as [Month] 
    ,COUNT(PIT.fld_PawnItemID)'COUNT' 
    ,SUM (PIT.fld_KaratGram)'GRAMS' 
    ,SUM (PH.fld_PrincipalAmt)'PRINCIPAL' 
FROM #AllExpired AE 
    LEFT JOIN Transactions.tbl_PawnItem PIT 
     ON AE.fld_PawnMainID=PIT.fld_PawnMainID 
    LEFT JOIN Transactions.tbl_PawnHisto PH 
     ON AE.fld_PawnMainID=PH.fld_PawnMainID 
GROUP BY DATENAME(MM,(DATEADD(MM,4,AE.fld_LoanDate))) 
+0

仍然空白。 :(。 – user2705620