我想在SQL Server查询中将计算列中的空值替换为0。
我的查询。
SELECT
Scenario, sum_amount + sum_cash + sum_tips AS total_earned
FROM
Cash_Scenario
WHERE
scenario_Id = 5
我试过
SELECT
Scenario, sum_amount + sum_cash + sum_tips AS total_earned,
ISNULL(total_earned, 0)
FROM
Cash_Scenario
WHERE
scenario_Id = 5
但是我收到了一个错误:
无效的列名称' total_earned'错误。
基本上我想返回0,如果total_earned值为null。
由于
答案 0 :(得分:5)
试试这个
SELECT Scenario, ISNULL(sum_amount,0) + ISNULL(sum_cash,0) + ISNULL(sum_tips,0) AS total_earned
FROM Cash_Scenario Where scenario_Id = 5
答案 1 :(得分:3)
我非常喜欢使用ANSI标准COALESCE()
而非定制ISNULL()
进行此操作 - 除非有令人信服的理由使用ISNULL()
:
SELECT Scenario,
(COALESCE(sum_amount, 0) + COALESCE(sum_cash, 0) + COALESCE(sum_tips, 0)
) AS total_earned
FROM Cash_Scenario
WHERE scenario_Id = 5;
而且,只是为了好玩,你可以这样做:
SELECT Scenario, x.total_earned
FROM Cash_Scenario s CROSS APPLY
(SELECT SUM(x) as total_earned
FROM (VALUES (sum_amount), (sum_cash), (sum_tips)) v(x)
) x
WHERE scenario_Id = 5;
我是第一个承认APPLY
是不 ANSI标准的人。但有时候,找到神秘而有效的方法来做某事真的很有趣。