如果没有找到行,如何使 SELECT COUNT(*) 在 GROUP BY 查询中返回 0

jdi*_*ids 5 t-sql

我正在编写一个查询来获取字段的计数并将其分组在一起,但我希望它返回所有值,即使计数为 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
Run Code Online (Sandbox Code Playgroud)

这是我想看到的:

COUNT     PMI
    1     900330
    5     900702
    0     900550
    0     900331
Run Code Online (Sandbox Code Playgroud)

但这就是我得到的:

COUNT     PMI
    1     900330
    5     900702
Run Code Online (Sandbox Code Playgroud)

我以前从未需要编写查询来完成此任务,因此如果这是微不足道的,我深表歉意。

编辑:我意识到这些表并不包含我正在寻找的所有项目。我有一个名为“lookup”的查找表,其中包含我希望查询计数的所有这些项目。

编辑2:谢谢大家。通过创建视图并使用查找表和外连接使其工作。这把戏做得很精彩。

Mar*_*ers 3

INNER JOIN如果匹配失败,您使用的将不返回任何行。你应该使用 anOUTER JOIN代替。

假设PMIItems

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
Run Code Online (Sandbox Code Playgroud)