日期:2014-05-17 浏览次数:20456 次
--if object_id('A') is not null
-- drop table A
--Go
--Create table A([年份] nvarchar(4),[职工代码] smallint,[姓名] nvarchar(2),[得分] smallint,[及格分] smallint,[课程] nvarchar(3),[是否合格] nvarchar(1),[人品] nvarchar(1))
--Insert into A
--Select '2010',101,N'张三',30,60,N'文化课',N'否',N'好'
--Union all Select '2010',101,N'张三',70,60,N'思想课',N'是',N'好'
--Union all Select '2010',102,N'李四',40,60,N'文化课',N'否',N'好'
--Union all Select '2010',103,N'王五',70,60,N'文化课',N'是',N'好'
--Union all Select '2010',105,N'刘飞',50,60,N'思想课',N'否',N'好'
SELECT * FROM a
declare @s nvarchar(4000)
set @s=''
Select @s=@s+','+quotename(课程+'得分')+'=max(case when [课程]='+quotename(课程,'''')+' then [得分] else null end)'
+','+quotename(课程+'是否及格')+'=max(case when [课程]='+quotename(课程,'''')+' then [是否合格] else null end)'
from A group by 课程
exec('select 年份,职工代码,姓名,人品,及格分'+@s+' from A group by 年份,职工代码,姓名,人品,及格分')
/*
年份 职工代码 姓名 人品 及格分 思想课得分 思想课是否及格 文化课得分 文化课是否及格
---- ------ ---- ---- ------ ------ ------- ------ -------
2010 101 张三 好 60 70 是 30 否
2010 102 李四 好 60 NULL NULL 40 否
2010 103 王五 好 60 NULL NULL 70 是
2010 105 刘飞 好 60 &nbs