sql – 如果没有为特定情况返回结果,则使用count(*)显示零
发布时间:2021-03-31 01:12:08 所属栏目:MsSql 来源:互联网
导读:我有这样的查询,它返回城市中每个案例的行数. select case edition_id when 6 then DELHI when 50 then AHMEDABAD when 4 then HYDERABAD when 25 then KOLKATA when 51 then
|
我有这样的查询,它返回城市中每个案例的行数. 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作为普通表是有意义的,这样你就不需要在每次运行查询时都创建它. (编辑:日照站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- SQL2005CLR函数扩展-深入环比计算的详解
- sql-server – 在SQL Server数据库中存储时间间隔的最佳方法
- sql server 2005中使用with实现递归的方法
- sql-server – 在数据库实例中重新启动数据库而不重新启动整
- 是否有像SQL Server 2005的TRY / CATCH块这样的MySQL功能?
- sqlserver中操作主从关系表的sql语句
- sql-server-2008 – 物化路径模式VS Hierarchyid
- SQL高级应用之同服务器上复制表到另一数据库中并实现去重复
- SQLServer 快速备份的十种方法
- MSSQL 计算两个日期相差的工作天数的语句
