1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 使用 case when进行行列转换

使用 case when进行行列转换

时间:2022-11-30 19:54:25

相关推荐

使用 case when进行行列转换

固定列数的行列转换

如表结构为:

Name subject score

---------------------------

张三 语文 80

张三 数学 70

张三 英语 60

李四 语文 90

李四 数学 80

李四 英语 100

....

转换为 :

语文 数学 英语

张三 80 70 60

李四 90 80 100

要求:创建表,源表,表名: Stu , 只用一句sql 得到转换结果。

解答:

方法一 :通过生成临时表的方式操作

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

方法二:课程只有语文、数学、物理这三门课程则可以使用静态sql 来实现 Sql2000

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 Stu

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

注:case when的作用就是一个条件选择语句,根据不同的要求显示不同的内容,格式是这样的case

when [选择条件]

then [结果1]

else [结果2]

end

其中[选择条件]也可以放在case之后。

CASE WHEN语句在DB2,ORACLE,SQL SERVER系列,SYBASE等大型数据库都受到支持,是标准的SQL语句.

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。