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
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
(select * from @tb a pivot (count(*) for 学历 in (硕士研究生,博士研究生,大专)) b ) a
join (select 单位名,COUNT(*) 合计 from @tb) b on a.单位名=b.单位名
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 行受影响)