大家好,这里的每个人都是我的代码
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)))
我遇到的问题是我的 Count 函数如果没有值则不返回0, Sum 函数如果没有结果值则不返回NULL检索,而不只是输出空白,为什么会这样?我该如何解决?
这是示例输出的屏幕截图
当然这不是我想要它输出零和空值。请帮帮我,我不知道什么是错的。谢谢。
答案 0 :(得分:17)
使用GROUP BY子句时,如果源中没有记录,则不能指望输出任何记录。
如果希望SUM和COUNT函数输出0,则不应使用GROUP BY。
原因是当你没有记录时,GROUP BY子句没有任何内容可以分组,然后无法给你任何输出。
例如:
SELECT COUNT(*) FROM (SELECT 'Dummy' AS [Dummy] WHERE 1 = 0) DummyTable
将返回一条值为'0'的记录,其中as:
SELECT COUNT(*) FROM (SELECT 'Dummy' AS [Dummy] WHERE 1 = 0) DummyTable
GROUP BY [Dummy]
将不会返回任何记录。
答案 1 :(得分:3)
我认为您需要将连接从INNER更改为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)))
答案 2 :(得分:1)
也许#AllExpired
为空,或其中一个连接没有返回结果?
记住内部联接需要双方都有结果才能返回,所以因为#AllExpired
为空,所以联接不返回任何内容。
将其更改为OUTER联接。