加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 如果没有为特定情况返回结果,则使用count(*)显示零

发布时间:2020-12-12 08:58:14 所属栏目:MsSql教程 来源:网络整理
导读:我有这样的查询,它返回城市中每个案例的行数. select case edition_id when 6 then 'DELHI' when 50 then 'AHMEDABAD' when 4 then 'HYDERABAD' when 25 then 'KOLKATA' when 51 then 'BANGALORE' when 5 then 'MUMBAI' when 24 then 'CHENNAI' end as CITY,c
我有这样的查询,它返回城市中每个案例的行数.
select 
    case edition_id 
        when 6 then 'DELHI' 
        when 50 then 'AHMEDABAD' 
        when 4 then 'HYDERABAD' 
        when 25 then 'KOLKATA' 
        when 51 then 'BANGALORE' 
        when 5 then 'MUMBAI' 
        when 24 then 'CHENNAI' 
    end as CITY,count(*) as Total 
from #tmptab1
group by edition_id

drop table #tmptab1

结果就像是

CITY    Total
MUMBAI  1
DELHI   28
CHENNAI 1
KOLKATA 35
AHMEDABAD 3

因此,如果没有从城市返回的行,则在最终结果中省略该城市

我希望结果为

CITY    Total
MUMBAI  1
DELHI   28
CHENNAI 1
KOLKATA 35
AHMEDABAD 3
BANGALORE 0 -- if no result from bangalore display zero.

这该怎么做 ?

我试过了

case count(*)>0 then count(*) else 0 end as Total

但它不起作用

解决方法

我会将城市插入临时表,然后使用分组查询执行LEFT JOIN,如下所示:
CREATE TABLE #cities (edition_id INT,city VARCHAR(16))
INSERT INTO #cities VALUES(6,'DELHI')
INSERT INTO #cities VALUES(50,'AHMEDABAD')
INSERT INTO #cities VALUES(4,'HYDERABAD')
INSERT INTO #cities VALUES(25,'KOLKATA')
INSERT INTO #cities VALUES(51,'BANGALORE')
INSERT INTO #cities VALUES(5,'MUMBAI')
INSERT INTO #cities VALUES(24,'CHENNAI')

select 
    c.city 'City',ISNULL(t.Total,0) 'Total'
from 
    #cities c
    LEFT JOIN (
        SELECT 
            edition_id,count(*) as Total 
        #tmptab1 
        GROUP BY edition_id
    ) AS t
    ON c.edition_id = t.edition_id

drop table #tmptab1
drop table #cities

顺便说一句,将#cities作为普通表是有意义的,这样你就不需要在每次运行查询时都创建它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读