原文:http://blog.csdn.net/liqfyiyi/article/details/7087466
固定列数的行列转换
如表结构为:
如
Name subject score
—————————
张三 语文 80
张三 数学 70
张三 英语 60
李四 语文 90
李四 数学 80
李四 英语 100
….
转换为 :
语文 数学 英语
张三 80 70 60
李四 90 80 100
方式一:
select name ,sum(yw) as ‘语文’,sum(sx) as ‘数学’,sum(wy) as ‘英语’
from(
select name ,
CASE subject WHEN ‘语文’ THEN score END AS yw,
CASE subject WHEN ‘数学’ THEN score END AS sx,
CASE subject WHEN ‘英语’ THEN score END AS wy
from Stu
) tempStu
group by name
方式二:
select name as 姓名,
max(case subject when ‘语文’ then score else 0 end) 语文,
max(case subject when ‘数学’ then score else 0 end) 数学,
max(case subject when ‘英语’ then score else 0 end) 英语
from score
group by name
方法三:如果课程不止语文、数学、物理这三门课程 则可以使用动态sql 来实现
创建一个用户变量,使用简单的T-SQL来实现。 Sql2000
declare @sql varchar(8000) –声明一个变量
set @sql = ‘select name as 姓名’
select @sql = @sql + ‘ , max(case subject when ”’ + subject+ ”’ then score else 0 end) [‘ + subject+ ‘]’
from (select distinct subject from Stu) as a
set @sql = @sql + ‘ from Stu group by name’
print @sql –打印生成的sql
exec(@sql) –执行该sql