我有这样的声明:
SELECT COUNT(AccedentId) AS NumberOfAccedentInYear
FROM Accident
GROUP BY DriverId, YEAR(AccedentDate)
HAVING (DriverId =@DriverId)<3
当有行时,我得到一个有效的计数,但是当没有行时,结果为空。当没有匹配的行时,我希望结果为 0。
我有这样的声明:
SELECT COUNT(AccedentId) AS NumberOfAccedentInYear
FROM Accident
GROUP BY DriverId, YEAR(AccedentDate)
HAVING (DriverId =@DriverId)<3
当有行时,我得到一个有效的计数,但是当没有行时,结果为空。当没有匹配的行时,我希望结果为 0。
也许你想要这个(我保留了明显的语法和拼写错误,如果没有更多信息我无法真正纠正):
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