您好,登錄后才能下訂單哦!
今天小編整理的都是固定行轉列(列轉行)的例子!
一:unpivot列轉行函數
舉例演示:
創建一張表tmp_test,數據如圖所示
代碼展示:
select code,name,cource,grade from tmp_test
unpivot(
grade for source in (chinese,math,english)
);
數據結果展示:
二:pivot行轉列函數
舉例演示:
創建一張表tmp_test2,數據如圖所示
代碼展示:
select *
from (select username,subject,source from tmp_test2)
pivot (sum(source)
for subject in ('語文' 語文,'數學' 數學,'英語' 英語));
數據結果展示:
其實該sql也可以用decode函數實現:
select username,
sum(decode(subject,'語文',source,0)) 語文,
sum(decode(subject,'數學',source,0)) 數學,
sum(decode(subject,'英語',source,0)) 英語,
from tmp_test2
group by username;
總結:
pivot函數:行轉列函數:
語法:pivot(任一聚合函數 for 需專列的值所在列名 in (需轉為列名的值));
unpivot函數:列轉行函數:
語法:unpivot(新增值所在列的列名 for 新增列轉為行后所在列的列名 in (需轉為行的列名));
執行原理:將pivot函數或unpivot函數接在查詢結果集的后面。相當于對結果集進行處理。
注:另外有的人說in后面可以跟子查詢語句,這個我也不能肯定,但是我在這次例子中自己去嘗試了,是不可以的。ORA-00936:缺失表達式
關于這一點,有興趣的小伙伴可以自己私下再去嘗試一下!
今天就先到這里吧,至于動態的行轉列我們下次在討論!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。