首页 > 解决方案 > 将 NULL 替换为 0

问题描述

我有以下CASE表达式将数据分成不同的类别并附加相应的时间。

case
when Wstat_Name_Ch like '%Overtime signup%' then payhours
end as All_OT_Signup,
case
when  Wstat_Abrv_Ch in ('CO', 'COU', 'Otnoshow') then payhours
end as OT_Removed,
case
when  Wstat_Abrv_Ch in ('Ov', 'OTField', 'MinStafotp', 'OvUpsOT') then payhours
end as OT_Hours_Worked

该语句返回如下数据:

All_OT_Signup    OT_Removed   OT_Hours_Worked
500.00            NULL         NULL
350.00            150.00       100.00
200.00            NULL         NULL

我需要做的是用 0 替换任何 NULL。我尝试ISNULL(payhours, 0)代替工资时间,但它没有用。

标签: sqlsql-servercasesql-null

解决方案


只需为每个表达式添加一个else分支,当第一个条件不匹配时返回:case0

case
    when Wstat_Name_Ch like '%Overtime signup%' then payhours
    else 0
end as All_OT_Signup,
case
    when  Wstat_Abrv_Ch in ('CO', 'COU', 'Otnoshow') then payhours
    else 0
end as OT_Removed,
case
    when  Wstat_Abrv_Ch in ('Ov', 'OTField', 'MinStafotp', 'OvUpsOT') then payhours
    else 0
end as OT_Hours_Worked

推荐阅读