表t
id sex school government area
-----------------------------------------
*** 男 中学 团员 北京
*** 男 大学 党员 上海
*** 女 小学 群众 北京
*** 女 中学 群众 天津
*** 男 小学 党员 上海
*** 女 大学 团员 北京
-------------------------------------------
用一条sql语句输出如下结果(不能用创建表插入数据的形式)
学校 团员 党员 群众
----------- -----------
大学 1 1 0
小学 0 1 1
中学 1 0 1
id sex school government area
-----------------------------------------
*** 男 中学 团员 北京
*** 男 大学 党员 上海
*** 女 小学 群众 北京
*** 女 中学 群众 天津
*** 男 小学 党员 上海
*** 女 大学 团员 北京
-------------------------------------------
用一条sql语句输出如下结果(不能用创建表插入数据的形式)
学校 团员 党员 群众
----------- -----------
大学 1 1 0
小学 0 1 1
中学 1 0 1
select 学校=school,
团员=sum(case when government='团员' then 1 else 0 end),
党员=sum(case when government='党员' then 1 else 0 end),
群众=sum(case when government='群众' then 1 else 0 end)
from 表t
group by school
sum(case when government = '团员' then 1 else 0 end) 团员,
sum(case when government = '党员' then 1 else 0 end) 党员,
sum(case when government = '群众' then 1 else 0 end) 群众
from t
group by school
set @sql = 'select school 学校'
select @sql = @sql + ' , sum(case government when ''' + government + ''' then Result end) [' + government + ']'
from (select distinct government from t) as a
set @sql = @sql + ' from t group by school'
exec(@sql)
insert 表t
select 1,'男','中学','团员','北京'
union select 2,'男','大学','党员','上海'
union select 3,'女','小学','群众','北京'
union select 4,'女','中学','群众','天津'
union select 5,'男','小学','党员','上海'
union select 6,'女','大学','团员','北京'
select 学校=school,
团员=sum(case when government='团员' then 1 else 0 end),
党员=sum(case when government='党员' then 1 else 0 end),
群众=sum(case when government='群众' then 1 else 0 end)
from 表t
group by schooldrop table 表t/* 结果
学校 团员 党员 群众
---------- ----------- ----------- -----------
大学 1 1 0
小学 0 1 1
中学 1 0 1(3 row(s) affected)
*/
insert tab
select '001','男','中学','团员','北京'
union all
select '002','男','大学','党员','上海'
union all
select '003','女','小学','群众','北京'
union all
select '004','女','中学','群众','天津'
union all
select '005','男','小学','党员','上海'
union all
select '006','女','大学','团员','北京'select * from tabselect school
,sum(case gowernment when '团员' then 1 else 0 end) AS 团员
,sum(case gowernment when '群众' then 1 else 0 end) AS 群众
,sum(case gowernment when '党员' then 1 else 0 end) AS 党员
from tab
group by schooldrop table tab
(6 行受影响)
id sex school gowernment area
---- ---- ---------- ---------- ----------
001 男 中学 团员 北京
002 男 大学 党员 上海
003 女 小学 群众 北京
004 女 中学 群众 天津
005 男 小学 党员 上海
006 女 大学 团员 北京(6 行受影响)学校 团员 群众 党员
---------- ----------- ----------- -----------
大学 1 0 1
小学 0 1 1
中学 1 1 0(3 行受影响)
insert into tb values('***', '男', '中学', '团员', '北京')
insert into tb values('***', '男', '大学', '党员', '上海')
insert into tb values('***', '女', '小学', '群众', '北京')
insert into tb values('***', '女', '中学', '群众', '天津')
insert into tb values('***', '男', '小学', '党员', '上海')
insert into tb values('***', '女', '大学', '团员', '北京')
go
select school 学校,
sum(case when government = '团员' then 1 else 0 end) 团员,
sum(case when government = '党员' then 1 else 0 end) 党员,
sum(case when government = '群众' then 1 else 0 end) 群众
from tb
group by school
go
declare @sql varchar(8000)
set @sql = 'select school 学校'
select @sql = @sql + ' , sum(case government when ''' + government + ''' then 1 else 0 end) [' + government + ']'
from (select distinct government from tb) as a
set @sql = @sql + ' from tb group by school'
exec(@sql)drop table tb/*
学校 团员 党员 群众
---------- ----------- ----------- -----------
大学 1 1 0
小学 0 1 1
中学 1 0 1(所影响的行数为 3 行)学校 党员 群众 团员
---------- ----------- ----------- -----------
大学 1 0 1
小学 1 1 0
中学 0 1 1
*/
insert t
select 1,'男','中学','团员','北京'
union select 2,'男','大学','党员','上海'
union select 3,'女','小学','群众','北京'
union select 4,'女','中学','群众','天津'
union select 5,'男','小学','党员','上海'
union select 6,'女','大学','团员','北京'declare @sql varchar(8000)
set @sql = 'select school 学校'
select @sql = @sql + ',' + government + '=sum(case government when ''' + government + ''' then 1 else 0 end)'
from (select distinct government from t) as a
set @sql = @sql + ' from t group by school'
exec(@sql)drop table t
/* 结果
学校 党员 群众 团员
---------- ----------- ----------- -----------
大学 1 0 1
小学 1 1 0
中学 0 1 1
*/