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.学校名称

解决方案 »

  1.   


    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
    */
      

  2.   

    create  table #tb(nd varchar(10), dwdm varchar(10),xb varchar(10),jhs int)
    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
      

  3.   

    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 学校
      

  4.   

    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
      

  5.   

    --用楼上的就可以啦
    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