【数据库】SQLServer行转列的多种实现方式
一、原表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...
·
一、原数据表
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
更多推荐
已为社区贡献2条内容
所有评论(0)