Return 使用 COUNT(column) SQL 服务器时为 NULL 而不是 0
Return NULL instead of 0 when using COUNT(column) SQL Server
我想查询哪个 运行 很好,它做了两种类型的工作,COUNT
和 SUM
。
类似于
select
id,
Count (contracts) as countcontracts,
count(something1),
count(something1),
count(something1),
sum(cost) as sumCost
from
table
group by
id
我的问题是:如果给定 ID 没有合同,COUNT
将 return 0,SUM
将 Null
。我想看到 null 而不是 0
我在考虑 Count (contracts) = 0 then null else Count (contracts) end
的情况,但我不想这样做,因为我在查询中有超过 12 个计数位置,而且它有大量记录,所以我认为它可能会变慢降低查询性能。
还有其他方法可以用NULL
替换0吗?
这里有三种方法:
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)
这三个都需要写比较复杂的表达式。然而,这真的没有那么难。只需多次复制该行,并更改每个变量的名称。或者,获取当前查询,将其放入电子表格并使用电子表格函数进行转换。然后将函数复制下来。 (电子表格对于重复的代码行来说是非常好的代码生成器。)
试试这个:
`select NULLIF ( Count(something) , 0)
我想查询哪个 运行 很好,它做了两种类型的工作,COUNT
和 SUM
。
类似于
select
id,
Count (contracts) as countcontracts,
count(something1),
count(something1),
count(something1),
sum(cost) as sumCost
from
table
group by
id
我的问题是:如果给定 ID 没有合同,COUNT
将 return 0,SUM
将 Null
。我想看到 null 而不是 0
我在考虑 Count (contracts) = 0 then null else Count (contracts) end
的情况,但我不想这样做,因为我在查询中有超过 12 个计数位置,而且它有大量记录,所以我认为它可能会变慢降低查询性能。
还有其他方法可以用NULL
替换0吗?
这里有三种方法:
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)
这三个都需要写比较复杂的表达式。然而,这真的没有那么难。只需多次复制该行,并更改每个变量的名称。或者,获取当前查询,将其放入电子表格并使用电子表格函数进行转换。然后将函数复制下来。 (电子表格对于重复的代码行来说是非常好的代码生成器。)
试试这个:
`select NULLIF ( Count(something) , 0)