溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

pivot和unpivot函數(shù)

發(fā)布時間:2020-07-12 06:59:38 來源:網(wǎng)絡(luò) 閱讀:1363 作者:小陳子057 欄目:關(guān)系型數(shù)據(jù)庫

今天小編整理的都是固定行轉(zhuǎn)列(列轉(zhuǎn)行)的例子!

一:unpivot列轉(zhuǎn)行函數(shù)
舉例演示:
創(chuàng)建一張表tmp_test,數(shù)據(jù)如圖所示
pivot和unpivot函數(shù)
代碼展示:
select code,name,cource,grade from tmp_test
unpivot(
grade for source in (chinese,math,english)
);
數(shù)據(jù)結(jié)果展示:
pivot和unpivot函數(shù)

二:pivot行轉(zhuǎn)列函數(shù)
舉例演示:
創(chuàng)建一張表tmp_test2,數(shù)據(jù)如圖所示
pivot和unpivot函數(shù)
代碼展示:
select *
from (select username,subject,source from tmp_test2)
pivot (sum(source)
for subject in ('語文' 語文,'數(shù)學(xué)' 數(shù)學(xué),'英語' 英語));
數(shù)據(jù)結(jié)果展示:
pivot和unpivot函數(shù)
其實(shí)該sql也可以用decode函數(shù)實(shí)現(xiàn):
select username,
sum(decode(subject,'語文',source,0)) 語文,
sum(decode(subject,'數(shù)學(xué)',source,0)) 數(shù)學(xué),
sum(decode(subject,'英語',source,0)) 英語,
from tmp_test2
group by username;

總結(jié):
pivot函數(shù):行轉(zhuǎn)列函數(shù):
  語法:pivot(任一聚合函數(shù) for 需專列的值所在列名 in (需轉(zhuǎn)為列名的值));
unpivot函數(shù):列轉(zhuǎn)行函數(shù):
  語法:unpivot(新增值所在列的列名 for 新增列轉(zhuǎn)為行后所在列的列名 in (需轉(zhuǎn)為行的列名));
執(zhí)行原理:將pivot函數(shù)或unpivot函數(shù)接在查詢結(jié)果集的后面。相當(dāng)于對結(jié)果集進(jìn)行處理。
注:另外有的人說in后面可以跟子查詢語句,這個我也不能肯定,但是我在這次例子中自己去嘗試了,是不可以的。ORA-00936:缺失表達(dá)式
pivot和unpivot函數(shù)
關(guān)于這一點(diǎn),有興趣的小伙伴可以自己私下再去嘗試一下!

今天就先到這里吧,至于動態(tài)的行轉(zhuǎn)列我們下次在討論!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI