行列转换的通常写法

原文: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

    原文作者:gadfly1981
    原文地址: https://www.jianshu.com/p/0cc5890775d4
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞