我有这样的声明:
SELECT COUNT(AccedentId) AS NumberOfAccedentInYear
FROM Accident
GROUP BY DriverId, YEAR(AccedentDate)
HAVING (DriverId =@DriverId)<3
当有行时,我得到一个有效的计数,但是当没有行时,结果为空。当没有匹配的行时,我希望结果为0.
答案 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