1. 程式人生 > >sql內置函數pivot強大的行轉列功能

sql內置函數pivot強大的行轉列功能

子查詢 註意 ges 中一 rom cnblogs blog 聚合函數 星期六

http://blog.csdn.net/xb12369/article/details/8149608

http://www.cnblogs.com/lwhkdash/archive/2012/06/26/2562979.html

行轉列其實就是 也就是說,行轉列後,原來的某個列的值變做了列名

原始表

技術分享

行轉列語句:

SELECT [星期一],[星期二],[星期三],[星期四],[星期五],[星期六],[星期日]--這裏是PIVOT第三步(選擇行轉列後的結果集的列)這裏可以用“*”表示選擇所有列,也可以只選擇某些列(也就是某些天)
FROM WEEK_INCOME --這裏是PIVOT第二步驟(準備原始的查詢結果,因為PIVOT是對一個原始的查詢結果集進行轉換操作,所以先查詢一個結果集出來)這裏可以是一個select子查詢,但為子查詢時候要指定別名,否則語法錯誤
PIVOT
(
    SUM(INCOME) for [week] in([星期一],[星期二],[星期三],[星期四],[星期五],[星期六],[星期日])--這裏是PIVOT第一步驟,也是核心的地方,進行行轉列操作。聚合函數SUM表示你需要怎樣處理轉換後的列的值,是總和(sum),還是平均(avg)還是min,max等等。例如如果week_income表中有兩條數據並且其week都是“星期一”,其中一條的income是1000,另一條income是500,那麽在這裏使用sum,行轉列後“星期一”這個列的值當然是1500了。後面的for [week] in([星期一],[星期二]...)中 for [week]就是說將week列的值分別轉換成一個個列,也就是“以值變列”。但是需要轉換成列的值有可能有很多,我們只想取其中幾個值轉換成列,那麽怎樣取呢?就是在in裏面了,比如我此刻只想看工作日的收入,在in裏面就只寫“星期一”至“星期五”(註意,in裏面是原來week列的值,"以值變列")。總的來說,SUM(INCOME) for [week] in([星期一],[星期二],[星期三],[星期四],[星期五],[星期六],[星期日])這句的意思如果直譯出來,就是說:將列[week]值為"星期一","星期二","星期三","星期四","星期五","星期六","星期日"分別轉換成列,這些列的值取income的總和。
)TBL--別名一定要寫

最終結果

技術分享

sql內置函數pivot強大的行轉列功能