1. 程式人生 > >[SQL]行轉列和列轉行

[SQL]行轉列和列轉行

1、測試資料集

username subject score
1 張三 語文 80
2 張三 數學 90
3 張三 生物 85
4 李四 語文 80
5 李四 數學  80
...

2、行轉列

select * from student_score
as P
PIVOT
(
    sum(score) for
    p.subject IN ([語文],[數學],[英語],[生物])
) as T

執行結果:

username 語文 數學 英語 生物
1 張三 80 90 85
2 李四 80 80

3、列轉行

測試資料:

projectname overseasupply nativesupply southsupply northsupply
1

A

100 200 50 50
2 B 200 300 150 150
3 C 159 400 20 320
4 D 250 30 15 15
SELECT P.projectname,p.supplier,p.supplynum
FROM
    (
        select 
            projectname
            ,overseasupply
            ,nativesupply
            ,southsupply
            ,northsupply
        from projectdetail
    )T
UNPIVOT
    (
        supplynum for supplier IN
        (overseasupply,nativesupply,southsupply,northsupply)
    )P
projectname supplier supplynum
1 A overseasupply 100
2 A nativesupply 200
3 A southsupply 50
4 A northsupply 50
5 B overseasupply 200
6 B nativesupply 300
...