首页 > 解决方案 > SQL 返回值 0 以防万一

问题描述

我的查询

select  count(*) CountByGroup, IncomeGroup
from table1
cross apply (values(
            case
                when try_convert(numeric(20), hh.HouseholdIncome) between 0    and 4012 then 'Limit 2 - $4,012'
                when try_convert(numeric(20), hh.HouseholdIncome) between 4013 and 4956 then 'Limit 3 - $4,956'
                
            end)
            
        ) x(IncomeGroup)

并返回

CountByGroup    IncomeGroup
17              Limit 2 - $4,012

不确定如何在组限制 3 - $4,956 上获得返回值 0,因此如果组限制 3 - $4,956 上没有值,它应该看起来像

CountByGroup    IncomeGroup
17              Limit 2 - $4,012
0               Limit 3 - $4,956

谢谢你。

标签: sqlsql-server

解决方案


使用派生表和LEFT JOIN

select count(*) as CountByGroup, v.IncomeGroup
from (values (0, 4012, 'Limit 2 - $4,012'),
             (4013, 4956, 'Limit 3 - $4,956')
     ) v(lo, hi, IncomeGroup) left join
     table1 t1
     on try_convert(numeric(20), t1.HouseholdIncome) between v.lo and v.hi
group by v.IncomeGroup

推荐阅读