您好,登錄后才能下訂單哦!
pivot & unpivot 11g新特性
以列-值對的形式出現,典型的行轉列報表函數。
create table test_demo(id int,name varchar(20),nums int); ---- 創建表 insert into test_demo values(1, '蘋果', 1000); insert into test_demo values(2, '蘋果', 2000); insert into test_demo values(3, '蘋果', 4000); insert into test_demo values(4, '橘子', 5000); insert into test_demo values(5, '橘子', 3000); insert into test_demo values(6, '葡萄', 3500); insert into test_demo values(7, '芒果', 4200); insert into test_demo values(8, '芒果', 5500); commit; select name, sum(nums) from test_demo group by name; select * from (select name, nums fromtest_demo) pivot(sum(nums) for name in('蘋果', '橘子', '葡萄', '芒果')); SQL> select * 2 from (select name, nums from test_demo) 3 pivot(sum(nums) 4 for name in('蘋果' as "蘋果", '橘子', '葡萄', '芒果')); --別名使用 蘋果 '橘子' '葡萄' '芒果' ---------- ---------- ---------- ---------- 7000 8000 3500 9700
這里再說語法:
pivot聚合函數 for 列名 in 類型 ,其中 in 中可以指定別名,in中還可以指定子查詢,比如 select distinct code from customers
典型的列轉行報表函數
create table Fruit(id int,name varchar(20), Q1 int, Q2 int, Q3 int,Q4 int); 這里Q1 int, Q2int, Q3 int, Q4 int表示四季度。 insert into Fruit values(1,'蘋果',1000,2000,3300,5000); insert into Fruit values(2,'橘子',3000,3000,3200,1500); insert into Fruit values(3,'香蕉',2500,3500,2200,2500); insert into Fruit values(4,'葡萄',1500,2500,1200,3500); commit; select * from Fruit; select id , name, quarter, sell from Fruit unpivot (sell for quarterin (q1, q2, q3, q4));
注意:unpivot沒有聚合函數,quarter、sell字段也是臨時的變量。
這里sell是統計值,quarter表示季度及類型。
執行結果:
SQL> select id , name, quarter, sell from Fruit unpivot (sell forquarter in (q1, q2, q3, q4)); ID NAME QUARTER SELL --------------------------------------- -------------------- ---------------------------------------------- 1 蘋果 Q1 1000 1 蘋果 Q2 2000 1 蘋果 Q3 3300 1 蘋果 Q4 5000 2 橘子 Q1 3000 2 橘子 Q2 3000 2 橘子 Q3 3200 2 橘子 Q4 1500 3 香蕉 Q1 2500 3 香蕉 Q2 3500 3 香蕉 Q3 2200 3 香蕉 Q4 2500 4 葡萄 Q1 1500 4 葡萄 Q2 2500 4 葡萄 Q3 1200 4 葡萄 Q4 3500
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。