0

我有这样的声明:

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

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

4

1 回答 1

4

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

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

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

于 2012-05-23T23:57:57.400 回答