oracle
的列轉行問題
oracle
中使用語句將行資料轉換稱不同的列表示,或者將不同的列資料寫到同一列的不同行上的行列轉換問題是乙個非常傳統的話題。
網路上流傳了很多將行資料轉換稱列資料的方法和應用例項,一般通過
decode
或者case
函式與聚合函式聯合實現功能,這裡就不再重複。
日前本人在乙個偶然的應用中用到了乙個需要將列資料轉換為行資料的問題。搜尋了很久沒有發現很合適的方法。網路一般推薦使用
union all
實現。這樣的乙個重要問題在於會造成對資料表的重複訪問,效能是個重要問題。
基於此,作者設想了另外一種實現可能性。實踐證明,這種方法有效提供了查詢效能。
create table f_distribution(
f1 varchar2(200),
qty1 int,
qty2 int,
qty3 int
);insert into f_distribution(f1,qty1,qty2,qty3) values('zhanglei',1,2,3);
insert into f_distribution(f1,qty1,qty2,qty3) values('lixian',1,2,3);
insert into f_distribution(f1,qty1,qty2,qty3) values('zhoubin',1,2,3);
insert into f_distribution(f1,qty1,qty2,qty3) values('zhengtong',1,2,3);
select * from f_distribution
select a.f1,b.fid,
decode(b.fid,'
資料1',a.qty1, '
資料2',a.qty2, '
資料3',a.qty3 )
from f_distribution a,
( select '
資料1' fid from dual
union all
select '
資料2' fid from dual
union all
select '
資料3' fid from dual
) b
oracle列轉行的問題
今天群裡市討論乙個列轉行的問題,開始沒有一點頭緒的,後來有位大哥說到是列轉行的問題,好像以前看到過就沒沒有仔細去看,又查了下je裡面的貼子,找到了解決的辦法如下 現有兩張表,分別為 a table,b table 分別儲存資料如下 a table id name 1 zhang 2 li 3 wan...
oracle的列轉行
首先建立測試環境 create table test1 user account varchar2 100 signup date date,user email varchar2 100 friend1 email varchar2 100 friend2 email varchar2 100 f...
oracle列轉行操作
這裡有兩張表,一張是錯誤類別表 ac dict option 另外一張是錯誤資訊表 mr meterdata 分別需要統計基礎資訊表中 性質變更 正常 霧珠 三種狀態的裝置數量,在group by 之後使用pivot 進行行列的變換.select from select from select me...