结果为空时返回0

时间:2012-05-23 23:53:11

标签: sql sql-server-2008

我有这样的声明:

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

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

1 个答案:

答案 0 :(得分:4)

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

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

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