sql pivot(行转列) 和unpivot(列转行)的用法

时间:2023-03-09 06:21:05
sql pivot(行转列) 和unpivot(列转行)的用法

1、PIVOT用法(行转列)

select * from Table_Score as a
pivot (sum(score) for a.name in ([语文],[数学],[外语],[文综],[理综])) as b

数据:

id    name    score
1 语文 100
2 数学 95
3 外语 100
4 文综 250
5 理综 300

结果:

id    语文    数学    外语    文综    理综
1 100 NULL NULL NULL NULL
2 NULL 95 NULL NULL NULL
3 NULL NULL 100 NULL NULL
4 NULL NULL NULL 250 NULL
5 NULL NULL NULL NULL 300

2、UNPIVOT用法(列转行)

select orders,weekend from
(select week1,week2,week3,week4,week5 from [dbo].[Table_Week]) a
unpivot(orders for weekend in (week1,week2,week3,week4,week5)) as b

数据:

week1    week2    week3    week4    week5
11 22 33 44 55
22 33 44 55 66
33 44 55 66 77
44 55 66 77 88

结果:

orders    weekend
11 week1
22 week2
33 week3
44 week4
55 week5
22 week1
33 week2
44 week3
55 week4
66 week5
33 week1
44 week2
55 week3
66 week4
77 week5
44 week1
55 week2
66 week3
77 week4
88 week5