请高手看看如何实现这个查询?
之前的问过一个查询。
现在又有新的需求。如下表
姓名 城市 单位 单位性质
王一 北京 联通 事业法人
王二 北京 网通 事业法人
王三 北京 电信 企业法人
王四 北京 移动 企业法人
王五 北京 网通 事业法人
王六 上海 联通 事业法人
王七 上海 移动 企业法人
王八 上海 移动 企业法人
王九 上海 网通 事业法人
王十 上海 铁通 事业法人
第一次的需求是要查询北京,上海事业法人、企业法人的员工数量
事业单位员工数 企业单位员工数
北京 3 2
上海 3 2
使用的这个查询 select 事业法人= sum(case 单位性质='事业法人' then 1 else 0 end) ,
企业法人=sum(case 单位性质='企业法人' then 1 else 0 end)
from tb group by 城市
现在要得需求跟高了,需要查询北京,上海事业法人,企业法人的单位数量。
这意味着要再城市分组的基础上再对单位进行分组统计。既如下效果:
事业单位数 企业单位数
北京 2 2
上海 3 1
实在不知道这个查询应该怎么个写法。
[解决办法]
怎么不自己做做再来问?
[解决办法]
select 事业单位数= case 单位性质='事业法人' then count(单位) else 0 end ,企业单位数=case 单位性质='企业法人' then count(单位) else 0 end from tb group by 城市
[解决办法]
drop table tbcreate table tb (姓名 varchar(4),城市 varchar(4),单位 varchar(4),企业性质 varchar(8))insert into tb select '王一', '北京', '联通', '事业法人' insert into tb select '王二', '北京', '网通', '事业法人' insert into tb select '王三', '北京', '电信', '企业法人'insert into tb select '王四', '北京', '移动', '企业法人' insert into tb select '王五', '北京', '网通', '事业法人'insert into tb select '王六', '上海', '联通', '事业法人'insert into tb select '王七', '上海', '移动', '企业法人'insert into tb select '王八', '上海', '移动', '企业法人'insert into tb select '王九', '上海', '网通', '事业法人'insert into tb select '王十', '上海', '铁通', '事业法人' select 城市,sum(case when 企业性质='事业法人' then 1 else 0 end) '事业法人',sum(case when 企业性质='企业法人' then 1 else 0 end) '企业法人'from(select distinct 城市,单位,企业性质 from tb )Agroup by 城市/*城市 事业法人 企业法人 ---- ----------- ----------- 北京 2 2上海 3 1(所影响的行数为 2 行)*/
[解决办法]
--现在又有新的需求。如下表--姓名 城市 单位 单位性质--王一 北京 联通 事业法人--王二 北京 网通 事业法人--王三 北京 电信 企业法人--王四 北京 移动 企业法人--王五 北京 网通 事业法人--王六 上海 联通 事业法人--王七 上海 移动 企业法人--王八 上海 移动 企业法人--王九 上海 网通 事业法人--王十 上海 铁通 事业法人if OBJECT_ID('tb') is not null drop table tb go create table tb(姓名 varchar(50),城市 varchar(50),单位 varchar(50), 单位性质 varchar(50))insert into tb select '王一','北京','联通','事业法人' union allselect '王二','北京','网通','事业法人' union allselect '王三','北京','电信','企业法人' union allselect '王四','北京','移动','企业法人' union allselect '王五','北京','网通','事业法人' union allselect '王六','上海','联通','事业法人' union allselect '王七','上海','移动','企业法人' union allselect '王八','上海','移动','企业法人' union allselect '王九','上海','网通','事业法人' union allselect '王十','上海','铁通','事业法人' select * from tb--第一次的需求是要查询北京,上海事业法人、企业法人的员工数量-- 事业单位员工数 企业单位员工数 -- 北京 3 2-- 上海 3 2select 城市,sum(case when 单位性质='事业法人' then 1 else 0 end )as '事业单位员工数' ,sum(case when 单位性质='企业法人' then 1 else 0 end) as '企业单位员工数' from tb group by 城市 城市 事业单位员工数 企业单位员工数----------------------------- ----------- -----------北京 3 2上海 3 2(2 行受影响)
[解决办法]
create table tb(姓名 varchar(50),城市 varchar(50),单位 varchar(50), 单位性质 varchar(50))insert into tb select '王一','北京','联通','事业法人' union allselect '王二','北京','网通','事业法人' union allselect '王三','北京','电信','企业法人' union allselect '王四','北京','移动','企业法人' union allselect '王五','北京','网通','事业法人' union allselect '王六','上海','联通','事业法人' union allselect '王七','上海','移动','企业法人' union allselect '王八','上海','移动','企业法人' union allselect '王九','上海','网通','事业法人' union allselect '王十','上海','铁通','事业法人' select 城市 , sum(case when 单位性质 = '事业法人' then 1 else 0 end) 事业单位数, sum(case when 单位性质 = '企业法人' then 1 else 0 end) 企业单位数from( select distinct 城市,单位,单位性质 from tb) tgroup by 城市drop table tb/*城市 事业单位数 企业单位数 -------------------------------------------------- ----------- ----------- 北京 2 2上海 3 1(所影响的行数为 2 行)*/
[解决办法]