create table query1
(danwei varchar(100),xueli varchar(100))
insert query1 
select '生物工程学院' ,  '硕士研究生' union all
select '生物工程学院' , '大专' union all
select '化学院'       ,  '博士研究生' union all
select '生物工程学院'  ,'博士研究生' union all
select '化学院'        , '大专' union all
select '生物工程学院'  , '硕士研究生' 
select danwei,
       硕士研究生=sum(case when xueli='硕士研究生' then 1 else 0 end ),
       博士研究生=sum(case when xueli='博士研究生' then 1 else 0 end ),
       大专=sum(case when xueli='大专' then 1 else 0 end ),
       合计=COUNT(xueli) from query1 
       group by danwei
       with rollup

解决方案 »

  1.   

    SELECT 单位名 ,
    SUM(CASE WHEN 学历 ='硕士研究生' THEN 1 ELSE 0 END )AS '硕士研究生' ,
    SUM(CASE WHEN 学历 ='博士研究生' THEN 1 ELSE 0 END )AS '博士研究生'  ,
    SUM(CASE WHEN 学历 ='大专' THEN 1 ELSE 0 END )AS '大专' ,
    合计=(SELECT COUNT(*) FROM TB GROUP BY 单位名 )
    FROM TB 
    GROUP BY 
    单位名 UNION ALLSELECT 
    单位名='合计',
    SUM(硕士研究生) 硕士研究生,
    SUM(博士研究生) 博士研究生,
    SUM(大专) 大专
    FROM 
    (SELECT 单位名 ,
    SUM(CASE WHEN 学历 ='硕士研究生' THEN 1 ELSE 0 END )AS '硕士研究生' ,
    SUM(CASE WHEN 学历 ='博士研究生' THEN 1 ELSE 0 END )AS '博士研究生'  ,
    SUM(CASE WHEN 学历 ='大专' THEN 1 ELSE 0 END )AS '大专' ,
    合计=(SELECT COUNT(*) FROM TB GROUP BY 单位名 )
    FROM TB 
    GROUP BY 
    单位名 )AS T
      

  2.   

    select a.*,b.合计 from 
    (select * from @tb a pivot (count(*) for 学历 in (硕士研究生,博士研究生,大专)) b ) a
     join (select 单位名,COUNT(*) 合计 from @tb) b on a.单位名=b.单位名
      

  3.   

    use Tempdb
    go
    --> --> (Roy)生成測試數據
     
    if not object_id('Tempdb..#T') is null
    drop table #T
    Go
    Create table #T([单位名] nvarchar(6),[学历] nvarchar(5))
    Insert #T
    select N'生物工程学院',N'硕士研究生' union all
    select N'生物工程学院',N'大专' union all
    select N'化学院',N'博士研究生' union all
    select N'生物工程学院',N'博士研究生' union all
    select N'化学院',N'大专' union all
    select N'生物工程学院',N'硕士研究生'
    Go
    declare @s nvarchar(4000)
    set @s='select [单位名]=isnull([单位名],''合计'') '
    Select @s=@s+','+quotename([学历])+'=sum(case when [学历]='''+[学历]+''' then 1 else 0 end)' 
    from #T group by [学历]
    exec(@s+',sum(1) as 合计 from #T group by [单位名] with rollup')
    (6 行受影响)
    单位名    博士研究生       大专          硕士研究生       合计
    ------ ----------- ----------- ----------- -----------
    化学院    1           1           0           2
    生物工程学院 1           1           2           4
    合计     2           2           2           6(3 行受影响)