使用COUNT(列)SQL Server时返回NULL而不是0

时间:2015-04-10 10:49:41

标签: sql sql-server null case

我有查询哪个正常运行,并执行两种类型的工作,COUNTSUM

这样的东西
select 
    id,
    Count (contracts) as countcontracts,
    count(something1),
    count(something1),
    count(something1),
    sum(cost) as sumCost
from 
    table
group by 
    id

我的问题是:如果某个ID没有合约,则COUNT会返回0,Null会返回SUM。我想看到null而不是0

我在考虑Count (contracts) = 0 then null else Count (contracts) end时的情况,但我不想这样做,因为我在查询中有超过12个计数位置,并且它预先记录了大量记录,所以我认为它可能会变慢降低查询性能。

有没有其他方法可以用NULL替换0?

2 个答案:

答案 0 :(得分:4)

以下是三种方法:

1. (case when count(contracts) > 0 then count(contracts) end) as countcontracts
2. sum(case when contracts is not null then 1 end) as countcontracts
3. nullif(count(contracts), 0)

所有这三个都需要编写更复杂的表达式。但是,这真的不难。只需多次复制该行,并在每个行上更改变量的名称。或者,获取当前查询,将其放入电子表格并使用电子表格函数进行转换。然后复制该功能。 (电子表格对于重复的代码行来说是非常好的代码生成器。)

答案 1 :(得分:4)

试试这个:

`select NULLIF ( Count(something) , 0)