注意:在oracle12上建立錯誤報錯,注意:12c和11g的使用者名稱是不一樣的,若從oracle11g匯出的表到oracle12c匯入會報錯create user c##user identified by oracle;
建立使用者的時候使用者名稱以c##或者c##開頭即可
公共使用者名稱必須用c##或c##開頭,本地使用者名,不能以c##,c##開頭,使用者和角色不能同名
在oracle 11g中,oracle 又增加了2個查詢:pivot(行轉列) 和unpivot(列轉行)
pivot 列轉行
測試資料 (id,型別名稱,銷售數量),案例:根據水果的型別查詢出一條資料顯示出每種型別的銷售數量。
create
table demo(id int,name varchar(20),nums int);
---- 建立表
insert
into demo values(1, '蘋果', 1000);
insert
into demo values(2, '蘋果', 2000);
insert
into demo values(3, '蘋果', 4000);
insert
into demo values(4, '橘子', 5000);
insert
into demo values(5, '橘子', 3000);
insert
into demo values(6, '葡萄', 3500);
insert
into demo values(7, '芒果', 4200);
insert
into demo values(8, '芒果', 5500);
分組查詢 (當然這是不符合查詢一條資料的要求的)
行轉列查詢
select * from (select name, nums from demo)
pivot (sum(nums) for name in ('蘋果' 蘋果, '橘子', '葡萄', '芒果'));
注意: pivot(聚合函式 for 列名 in(型別)) ,其中 in(」) 中可以指定別名,in中還可以指定子查詢,比如 select distinct code from customers
當然也可以不使用pivot函式,等同於下列語句,只是**比較長,容易理解
select *
from (select
sum(nums) 蘋果 from demo where name = '蘋果'),
(select
sum(nums) 橘子 from demo where name = '橘子'),
(select
sum(nums) 葡萄 from demo where name = '葡萄'),
(select
sum(nums) 芒果 from demo where name = '芒果');
unpivot 行轉列顧名思義就是將多列轉換成1列中去
案例:現在有乙個水果表,記錄了4個季度的銷售數量,現在要將每種水果的每個季度的銷售情況用多行資料展示。
建立表和資料
create
table fruit(id int,name varchar(20), q1 int, q2 int,
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);
列轉行查詢unpivot (xiaoshou for jidu in (q1, q2, q3, q4) )
注意: unpivot沒有聚合函式,xiaoshou、jidu欄位也是臨時的變數
同樣不使用unpivot也可以實現同樣的效果,只是sql語句會很長,而且執行速度效率也沒有前者高
id=f.id)
xiaoshou from fruit f
union
select id, name ,'q2' jidu, (select q2 from fruit where
id=f.id)
xiaoshou from fruit f
union
select id, name ,'q3' jidu, (select q3 from fruit where
id=f.id)
xiaoshou from fruit f
union
select id, name ,'q4' jidu, (select q4 from fruit where
id=f.id)
xiaoshou from fruit f
Oracle行列轉換
1.列轉行 create table t col row id int,c1 varchar2 10 c2 varchar2 10 c3 varchar2 10 insert into t col row values 1,v11 v21 v31 insert into t col row valu...
Oracle行列轉換
行轉列 select count over cnt,rn,str from select rownum rn,substr a.str,instr a.str,1,a.n 1,instr a.str,1,a.n 1 instr a.str,1,a.n 1 str from select a,b,c,...
oracle 行列轉換
q 如何實現行列轉換 a 1 固定列數的行列轉換 如student subject grade student1 語文 80 student1 數學 70 student1 英語 60 student2 語文 90 student2 數學 80 student2 英語 100 轉換為 語文 數學 英...