打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
使用 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
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
SQL 行转列,列转行
sql 交叉表
SQL sql语句实现行转列的3种方法
有幸去华为面试数据分析岗,看到SQL后我拒绝了
SQL Server 实现行列(纵横表)转换 – 码农网
浅析SQL语句行列转换的两种方法 case...when与pivot函数的应用
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服