【数据库】SQLServer行转列的多种实现方式

本文介绍了如何使用SQL进行数据的行转列操作,包括动态和静态两种方式。动态转换通过CASE WHEN结合聚合函数SUM实现,静态转换则直接在SELECT语句中指定列名。这两种方法在数据分析和报表生成中非常实用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、原数据表

name    course    score
张三    A    90
张三    B    90
张三    C    90
张三    D    90
张三    E    90
张三    F    90
张三    G    90
李四    A    90
李四    B    90
李四    C    90
李四    D    90
李四    E    90
李四    H    90
李四    I    90

二、行转列

2.1case when 动态行转列


declare @sql varchar(4000)  
set @sql = 'select NAME'  
  
select @sql = @sql + ',sum(case COURSE when '''+COURSE+''' then  SCORE end) ['+COURSE+']'  
from (select distinct COURSE from STUDENT  ) as a  
order by COURSE  
   
select @sql = @sql+' from STUDENT  group by NAME'  
  
-- print @sql  
exec(@sql) 

2.2 case when 静态行转列

select NAME,  
sum(case COURSE when 'A' then SCORE end) as A,  
sum(case COURSE when 'B' then SCORE end) as B,
sum(case COURSE when 'C' then SCORE end) as C,
sum(case COURSE when 'D' then SCORE end) as D,
sum(case COURSE when 'E' then SCORE end) as E,
sum(case COURSE when 'F' then SCORE end) as F,
sum(case COURSE when 'G' then SCORE end) as G,
sum(case COURSE when 'H' then SCORE end) as H
from student  
-- where   
group by NAME  

2.3 内置函数pivot


SELECT *
FROM student
PIVOT (SUM(score) FOR course IN (A,B,C,D,E,F,G,H,I) ) 
as t


 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值