在寫一些複雜的sql的時候,經常需要使用到行變列的技巧,一些帳務系統的統計也經常會寫到這樣的sql。主要用到了max、decode或nvl這些函式來達到目的。寫下來讓大家互相學習學習!下面是乙個行變列的例子。
如表row2column2有以下資料:
名字 課程 分數
1 張三 語文 80
2 張三 數學 86
3 張三 英語 75
4 李四 語文 78
5 李四 數學 85
6 李四 英語 78
想變成下面記錄:
名字 語文 數學 英語
1 李四 78 85 78
2 張三 80 86 75
create table row2column2(name_ varchar2(20),
class varchar2(50),
score number(3));
insert into row2column2 values ('張三', '語文', 80);
insert into row2column2 values ('張三', '數學', 86);
insert into row2column2 values ('張三', '英語', 75);
insert into row2column2 values ('李四', '語文', 78);
insert into row2column2 values ('李四', '數學', 85);
insert into row2column2 values ('李四', '英語', 78);
select * from row2column2;
select name_,
max(decode(class, '語文', t.score, 0)) 語文,
max(decode(class, '數學', t.score, 0)) 數學,
max(decode(class, '英語', t.score, 0)) 英語
from row2column2 t
group by name_;
oracle行轉列 列轉行
一 行轉列 需要將如下格式 轉換為 這就是最常見的行轉列,主要原理是利用decode函式 聚集函式 sum 結合group by分組實現的 create table test id varchar2 255 primary key not null,name varchar2 255 course ...
行轉列 列轉行 oracle滴
今天做寫sql的時候遇到了列轉行的問題,以前寫過,下面是找到的方法,大家複習一下吧。列轉行 create table test name char 10 km char 10 cj int insert test values 張三 語文 80 insert test values 張三 數學 86...
Oracle行轉列和列轉行
1.1 初始測試資料 表結構 test tb grade sql 1 create table test tb grade 2 3 id number 10 not null,4 user name varchar2 20 char 5 course varchar2 20 char 6 score...