如何替换SQL Server查询中的计算字段中的空值

时间:2016-12-06 20:13:28

标签: sql sql-server

我想在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。

由于

2 个答案:

答案 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标准的人。但有时候,找到神秘而有效的方法来做某事真的很有趣。