如何多组统计!
表t
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
[解决办法]
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
[解决办法]
declare @sql varchar(8000)
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)
[解决办法]
create table 表t(id varchar(10),sex varchar(10),school varchar(10),government varchar(10),area varchar(10))
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 school
drop table 表t
/* 结果
学校 团员 党员 群众
---------- ----------- ----------- -----------
大学 1 1 0
小学 0 1 1
中学 1 0 1
(3 row(s) affected)
*/
[解决办法]
create table tab(id varchar(3),sex varchar(2),school varchar(10),gowernment varchar(4),area varchar(10))
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 tab
select 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 school
drop 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 行受影响)
[解决办法]
create table tb(id varchar(10),sex varchar(10),school varchar(10),government varchar(10),area varchar(10))
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
*/
[解决办法]
create table t(id varchar(10),sex varchar(10),school varchar(10),government varchar(10),area varchar(10))
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
*/