select 学校名称=学校名称,
计算机=sum(计算机),
电子工程=sum(电子工程),
机械=sum(机械),
男=sum(男),
女=sum(女)
from (
select 学校名称=学校,
计算机=case 专业 when '计算机' then count(专业) else 0 end,
电子工程=case 专业 when '电子工程' then count(专业) else 0 end,
机械=case 专业 when '机械' then count(专业) else 0 end,
男=case 性别 when '男' then count(性别) else 0 end,
女=case 性别 when '女' then count(性别) else 0 end
from tablename
group by 专业,性别,学校
) t
group by t.学校名称
计算机=sum(计算机),
电子工程=sum(电子工程),
机械=sum(机械),
男=sum(男),
女=sum(女)
from (
select 学校名称=学校,
计算机=case 专业 when '计算机' then count(专业) else 0 end,
电子工程=case 专业 when '电子工程' then count(专业) else 0 end,
机械=case 专业 when '机械' then count(专业) else 0 end,
男=case 性别 when '男' then count(性别) else 0 end,
女=case 性别 when '女' then count(性别) else 0 end
from tablename
group by 专业,性别,学校
) t
group by t.学校名称
set nocount on
go--创建临时表
create table #tp (姓名 varchar(20), 性别 varchar(10), 年龄 int, 专业 varchar(100), 学校 varchar(100))
go--追加测试数据
insert into #tp (姓名, 性别, 年龄,专业,学校) values ('张学友', '男', 21, '计算机', '北京理工大学')
insert into #tp (姓名, 性别, 年龄,专业,学校) values ('张三丰', '男', 25, '电子工程', '北京大学')
insert into #tp (姓名, 性别, 年龄,专业,学校) values ('张惠妹', '女', 19, '计算机', '北京理工大学')
insert into #tp (姓名, 性别, 年龄,专业,学校) values ('张国荣', '男', 20, '机械', '北京大学')
insert into #tp (姓名, 性别, 年龄,专业,学校) values ('张娜娜', '女', 22, '计算机', '北京大学')
insert into #tp (姓名, 性别, 年龄,专业,学校) values ('张纪中', '男', 23, '机械', '北京理工大学')
insert into #tp (姓名, 性别, 年龄,专业,学校) values ('张百名', '男', 24, '电子工程', '北京理工大学')
--生成动态SQL串
declare @s varchar(8000)set @s=''
select @s=@s+',' + quotename(专业) +'=sum(case 专业 when ''' + 专业 + ''' then 1 else 0 end)'
from #tp
group by 专业
order by 专业set @s=@s + ',[男]=sum(case 性别 when ''男'' then 1 else 0 end) ,
[女]=sum(case 性别 when ''女'' then 1 else 0 end)'print @sset @s = 'select 学校 as 学校名称' + @s + ' from #tp group by 学校 order by 学校'
exec (@s)
--删除临时表
drop table #tp/*
--结果
学校 电子工程 机械 计算机 男 女
---------------------------------------------------------
北京大学 1 1 1 2 1
北京理工大学 1 1 2 3 1
*/
insert into #tb
select '2005','01','男',1 union
select '2005','01','女',1 union
select '2005','01','不限',3 union
select '2005','02','男',3 union
select '2005','02','女',2 union
select '2005','02','不限',1
--select * from #tb--处理语句
--declare @sql varchar(200)
declare @sql varchar(8000)
select @sql=''
select @sql=@sql+','+xb+'=sum(case xb when '''+xb+''' then jhs else 0 end) '
from #tb
group by xb
order by xbselect * from #tb
declare @runsql varchar(8000)
set @runsql = 'select nd , dwdm '+@sql+' from #tb group by nd, dwdm'
print @runsql--@sql = 'select nd , dwdm'+@sql+' from #tb group by nd, dwdm'
--Select @sql as sql from #tb
EXEC (@runsql) drop table #tb
insert @t
select '张学友','男',21,'计算机','北京理工大学' union all
select '张三丰','男',25,'电子工程','北京大学' union all
select '张惠妹','女',19,'计算机','北京理工大学' union all
select '张国荣','男',20,'机械','北京大学' union all
select '张娜娜','女',22,'计算机','北京大学' union all
select '张纪中','男',23,'机械','北京理工大学' union all
select '张百名','男',24,'电子工程','北京理工大学'--select * from @tselect 学校,
计算机=sum(case 专业 when '计算机' then 1 else 0 end),
电子工程=sum(case 专业 when '电子工程' then 1 else 0 end),
机械=sum(case 专业 when '机械' then 1 else 0 end),
男=sum(case 性别 when '男' then 1 else 0 end),
女=sum(case 性别 when '女' then 1 else 0 end)
from @t
group by 学校
insert @t
select '张学友','男',21,'计算机','北京理工大学' union all
select '张三丰','男',25,'电子工程','北京大学' union all
select '张惠妹','女',19,'计算机','北京理工大学' union all
select '张国荣','男',20,'机械','北京大学' union all
select '张娜娜','女',22,'计算机','北京大学' union all
select '张纪中','男',23,'机械','北京理工大学' union all
select '张百名','男',24,'电子工程','北京理工大学'--select * from @tselect 学校,
计算机=sum(case 专业 when '计算机' then 1 else 0 end),
电子工程=sum(case 专业 when '电子工程' then 1 else 0 end),
机械=sum(case 专业 when '机械' then 1 else 0 end),
男=sum(case 性别 when '男' then 1 else 0 end),
女=sum(case 性别 when '女' then 1 else 0 end)
from @t
group by 学校---结果
学校名称 计算机 电子工程 机械 男 女
北京大学 1 1 1 2 1
北京理工大学 2 1 1 3 1
declare @t table(姓名 char(8),性别 char(2),年龄 int,专业 varchar(98),学校 varchar(100))
insert @t
select '张学友','男',21,'计算机','北京理工大学' union all
select '张三丰','男',25,'电子工程','北京大学' union all
select '张惠妹','女',19,'计算机','北京理工大学' union all
select '张国荣','男',20,'机械','北京大学' union all
select '张娜娜','女',22,'计算机','北京大学' union all
select '张纪中','男',23,'机械','北京理工大学' union all
select '张百名','男',24,'电子工程','北京理工大学'--select * from @tselect 学校,
计算机=sum(case 专业 when '计算机' then 1 else 0 end),
电子工程=sum(case 专业 when '电子工程' then 1 else 0 end),
机械=sum(case 专业 when '机械' then 1 else 0 end),
男=sum(case 性别 when '男' then 1 else 0 end),
女=sum(case 性别 when '女' then 1 else 0 end)
from @t
group by 学校---结果
学校名称 计算机 电子工程 机械 男 女
北京大学 1 1 1 2 1
北京理工大学 2 1 1 3 1