我正在寻找一个抓取字段计数并将其组合在一起的查询,但我希望它返回所有值,即使计数为0。
这就是我所拥有的:
SELECT COUNT(*)
,PMI
FROM Items AS AA
JOIN Headers AS BB
ON AA.DocID = BB.ID
WHERE (DocDate = CAST(CONVERT(varchar(8), GETDATE() - 1, 1) AS datetime))
AND PMI != ''
GROUP BY PMI
以下是我想看到的内容:
COUNT PMI
1 900330
5 900702
0 900550
0 900331
但这是我得到的:
COUNT PMI
1 900330
5 900702
我以前从来没有写过一个查询来完成这个,所以如果这是微不足道我会道歉。
编辑:我意识到这些表格不包含我要查找的所有项目。我有一个名为'lookup'的查找表,其中包含我希望查询计数的所有这些项目。编辑2:谢谢大家。通过创建视图并使用查找表和外部联接使其工作。诀窍很奇妙。
答案 0 :(得分:1)
您正在使用INNER JOIN
,如果匹配的话,则不会返回任何行。您应该使用OUTER JOIN
代替。
假设PMI
上有Items
:
SELECT PMI, COUNT(BB.ID)
FROM Items AS AA
LEFT JOIN Headers AS BB
ON AA.DocID = BB.ID
WHERE (DocDate = CAST(CONVERT(varchar(8), GETDATE() - 1, 1) AS datetime))
AND PMI != ''
GROUP BY PMI
答案 1 :(得分:1)
简单回答是包装整个SQL查询并在COUNT列上添加SUM。
SELECT SUM(yourCountField), someOtherField1, someOtherField2
FROM
(
SELECT COUNT(yourCountField), someOtherField1, someOtherField2
FROM ....
)
GROUP BY someOtherField1, someOtherField2