pivot
語法:
(聚合函數 for 列名 in(類型))
注:其中 in(‘’) 中可以指定別名,in中還可以指定子查詢。
例子:
select * from ( select 333 nums,'蘋果' names from dual union all select 555 nums,'香蕉' names from dual union all select 777 nums,'鴨梨' names from dual ) pivot(sum(nums) for names in ('蘋果','香蕉','鴨梨'))
unpivot
注:沒有聚合函數
例子:
select nums,names from ( select 333 蘋果, 555 香蕉, 666 鴨梨 from dual ) unpivot(names for nums in(蘋果,香蕉,鴨梨))
例2:
創建表A
create table A ( ssyf varchar2(10), num1 number, num2 number, num3 number );
往表A插入數據
SSYF NUM1 NUM2 NUM3 SZ 201901 1 2 3 a 201902 2 2 2 a 201903 3 3 3 a 201904 4 4 4 a 201905 5 5 5 a 201906 6 6 6 a 201907 7 7 7 a 201908 8 8 8 a 201909 9 9 9 a 201910 10 10 10 a 201911 11 11 11 a 201912 12 12 12 a 201901 1 1 1 b 201902 2 2 2 b 201903 3 3 3 b 201904 4 4 4 b 201905 5 5 5 b 201906 6 6 6 b 201907 7 7 7 b 201908 8 8 8 b 201909 9 9 9 b 201910 10 10 10 b 201911 11 11 11 b 201912 12 12 12 b
代碼和結果如下
1.
select * from a pivot(sum(num1) num1, sum(num2) num2, sum(num3) num3 for ssyf in('201901', '201902', '201903', '201904', '201905', '201906', '201907', '201908', '201909', '201910', '201911', '201912'))
結果:
2.
select shu1, shu2, zdmc, ssyf, sz from a unpivot((shu1, shu2) for zdmc in((num1, num2) as '1and2', (num2, num3) as '2and3', (num1, num3) as '1and3')) where ssyf = '201901' and sz = 'a'