结果为空时返回0

AYK*_*KHO 0 sql sql-server-2008

我有这样的声明:

SELECT  COUNT(AccedentId) AS NumberOfAccedentInYear
            FROM         Accident
            GROUP BY DriverId, YEAR(AccedentDate)
            HAVING     (DriverId =@DriverId)<3
Run Code Online (Sandbox Code Playgroud)

当有行时,我得到一个有效的计数,但当没有行时,结果为空。当没有匹配的行时,我希望结果为 0。

Aar*_*and 5

也许你想要这个(我保留了明显的语法和拼写错误,如果没有更多信息,我无法真正纠正):

SELECT NumberOfAccedentInYear = ISNULL
(
  (SELECT COUNT(AccedentId)
   FROM         Accident
   GROUP BY DriverId, YEAR(AccedentDate)
   HAVING     (DriverId =@DriverId)<3))
   , 0
);
Run Code Online (Sandbox Code Playgroud)

对于任何对 COALESCE 与 ISNULL 讨论以及为什么我更改答案以使用 ISNULL 感到好奇的人,@kanav 正确地指出 COALESCE 更昂贵。正如我在这里解释的那样,COALESCE 对子查询求值两次:https ://stackoverflow.com/a/10669660/61305