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