/*-------------------行列互转-------------------*/
/******** 以学生成绩为例子,比较形象易懂 整理人:中国风(Roy) 日期:2008.06.06 ************/
--1、行互列 --> --> (Roy)生成測試數據
if not object_id('Class') is null
drop table Class
Go
Create table Class
([Student] nvarchar(2),[Course] nvarchar(2),[Score] int)
Insert Class
select N'张三',N'语文',78
union all
select N'张三',N'数学',87 union all
select N'张三',N'英语',82 union all
select N'张三',N'物理',90 union all
select N'李四',N'语文',65 union all
select N'李四',N'数学',77 union all
select N'李四',N'英语',65 union all
select N'李四',N'物理',85
Go
select * from class
--2000方法:
--动态:
declare @s nvarchar(4000)
set @s=''
Select @s=@s+','+quotename([Course])
+'=max(case when [Course]='+quotename([Course],'''') --quotename()使用有效的分隔标示符
+' then [Score] else 0 end)' from Class
group by[Course]
exec
('select [Student]'+@s+' from Class group by [Student]')
--生成静态:
select [Student],
[数学]=max(case when [Course]='数学' then [Score] else 0 end), --max()此处没有特殊意义,只是为了显示科目类字段,因为科目字段不在group by 字段中
[物理]=max(case when [Course]='物理' then [Score] else 0 end),
[英语]=max(case when [Course]='英语' then [Score] else 0 end),
[语文]=max(case when [Course]='语文' then [Score] else 0 end)
from Class group by [Student]
GO
了解更多关于数据库方面的知识,请访问上海数据库培训学校