-- 基本的なUnPivot その1 with t(ID,Val1,Val2) as( select 5,10,90 from dual union all select 6,20,80 from dual union all select 7,30,70 from dual) select * from t UnPivot(Vals for Cols in(Val1,Val2));
出力結果 ID Cols Vals -- ---- ---- 5 VAL1 10 5 VAL2 90 6 VAL1 20 6 VAL2 80 7 VAL1 30 7 VAL2 70
-- 基本的なUnPivot その2 with t(ID,Val1,Val2) as( select 5,10,90 from dual union all select 6,20,80 from dual union all select 7,30,70 from dual) select * from t UnPivot(Vals for SortKeys in(Val1 as 1, Val2 as 2)) order by ID,SortKeys;
出力結果 ID SortKeys Vals -- -------- ---- 5 1 10 5 2 90 6 1 20 6 2 80 7 1 30 7 2 70
-- 基本的なUnPivot その3 with t(ID,Val1,Val2) as( select 5,10,90 from dual union all select 6,20,80 from dual union all select 7,30,70 from dual) select * from t UnPivot(Vals for (SortKeys,Moto) in(Val1 as (1,'Moto1'), Val2 as (2,'Moto2'))) order by ID,SortKeys;
出力結果 ID SortKeys Moto Vals -- -------- ----- ---- 5 1 Moto1 10 5 2 Moto2 90 6 1 Moto1 20 6 2 Moto2 80 7 1 Moto1 30 7 2 Moto2 70
-- 複数列でUnPivot その1 with t(ID,Val1,Name1,Val2,Name2) as( select 1,11,'AA',66,'FF' from dual union all select 2,22,'BB',77,'GG' from dual union all select 3,33,'CC',88,'HH' from dual union all select 4,44,'DD',99,'II' from dual union all select 5,55,'EE',20,'JJ' from dual) select * from t UnPivot((Vals,Names) for Cols in((Val1,Name1) as 'V1N1', (Val2,Name2) as 'V2N2'));
出力結果 ID Cols Vals Names -- ---- ---- ----- 1 V1N1 11 AA 1 V2N2 66 FF 2 V1N1 22 BB 2 V2N2 77 GG 3 V1N1 33 CC 3 V2N2 88 HH 4 V1N1 44 DD 4 V2N2 99 II 5 V1N1 55 EE 5 V2N2 20 JJ
-- 複数列でUnPivot その2 with t(ID,Val1,Name1,Val2,Name2) as( select 1,11,'AA',66,'FF' from dual union all select 2,22,'BB',77,'GG' from dual union all select 3,33,'CC',88,'HH' from dual union all select 4,44,'DD',99,'II' from dual union all select 5,55,'EE',20,'JJ' from dual) select * from t UnPivot((Vals,Names) for (Col1,Col2) in((Val1,Name1) as ('V1','N1'), (Val2,Name2) as ('V2','N2')));
出力結果 ID Col1 Col2 Vals Names -- ---- ---- ---- ----- 1 V1 N1 11 AA 1 V2 N2 66 FF 2 V1 N1 22 BB 2 V2 N2 77 GG 3 V1 N1 33 CC 3 V2 N2 88 HH 4 V1 N1 44 DD 4 V2 N2 99 II 5 V1 N1 55 EE 5 V2 N2 20 JJ
-- UnPivotしてPivot with t(ID,Val1,Val2,Val3,Val4) as( select 'Sat',10,15,20,25 from dual union all select 'Sun',30,35,40,45 from dual union all select 'Mon',50,55,60,65 from dual) select * from t UnPivot(Vals for Cols in(Val1,Val2,Val3,Val4)) Pivot (max(Vals) for ID in('Sat' as Sat,'Sun' as Sun,'Mon' as Mon)) order by Cols;
出力結果 Cols Sat Sun Mon ---- --- --- --- VAL1 10 30 50 VAL2 15 35 55 VAL3 20 40 60 VAL4 25 45 65
マニュアル --- PivotおよびUnPivotの使用例 マニュアル --- pivot_clauseとunpivot_clause マニュアル --- ピボット操作 OracleSQLパズル 8-21 sys.odciVarchar2Listとsys.odciNumberList OracleSQLパズル 10-278 unpivotとpivot OracleSQLパズル 10-284 UnPivotして連番付与
"図でイメージするOracle DatabaseのSQL全集" インデックスに戻る
Copyright © 2012, Oracle Corporation Japan. All rights reserved.
無断転載を禁ず |
この文書はあくまでも参考資料であり、掲載されている情報は予告なしに変更されることがあります。日本オラクル社は本書の内容に関していかなる保証もいたしません。また、本書の内容に関連したいかなる損害についても責任を負いかねます。 Oracleは米国Oracle Corporationの登録商標です。文中に参照されている各製品名及びサービス名は米国Oracle Corporationの商標または登録商標です。その他の製品名及びサービス名はそれぞれの所有者の商標または登録商標の可能性があります。 |
山岸 賢治(やまぎし けんじ)
Oracle ACEの1人。
OracleSQLパズルの運営者。
図でイメージする
Oracle DatabaseのSQL全集 |
||