╔═══════╦═══════╗
║ agent ║ prime ║
╠═══════╬═══════╣
║ Said ║ 100 ║
║ Farid ║ 200 ║
║ Walid ║ 150 ║
║ Said ║ 300 ║
║ Said ║ 250 ║
║ Said ║ 400 ║
║ Farid ║ 300 ║
║ Farid ║ 250 ║
║ Walid ║ 140 ║
╚═══════╩═══════╝查询
select agent, ISNULL(count(*),0) as NB from [agents]
where prime >= 200
group by agent产出:
╔═══════╦═══════╗
║ agent ║ prime ║
╠═══════╬═══════╣
║ Farid ║ 3 ║
║ Said ║ 3 ║
╚═══════╩═══════╝我想用0替换空值,因为正如您可以看到的那样,代理'walid‘没有素数>= 200。我想取得的成果:
agent prime
Farid 3
Said 3
Walid 0我知道使用UNION是可以实现的,但是我想知道为什么这个ISNULL在这种情况下是不起作用的,如果可以的话。
发布于 2017-04-29 15:22:39
where子句完全从结果集中筛选Walid。试一试这种方法:
select agent, sum(case when prime >= 200 then 1 else 0 end) as NB
from [agents]
group by agent发布于 2017-04-29 15:21:02
问题是,where子句过滤掉了所有东西。您可以使用条件聚合完成所需的任务:
select agent, sum(case when prime >= 200 then 1 else 0 end) as nb
from agents
group by agent;提示:count(*)不返回NULL。它返回0,因此不需要使用COALESCE() (或类似的逻辑)。
发布于 2017-04-29 15:19:39
请用NVL代替ISNULL。我想它会给你想要的结果。
https://stackoverflow.com/questions/43697245
复制相似问题