1.1、建表
1 create table kecheng2 (3 id number,
4 name varchar2(20),
5 course varchar2(20),
6 score number
7 );
8 insert into kecheng (id, name, course, score)
9 values (1, '張三', '語文', 67);
10 insert into kecheng (id, name, course, score)
11 values (1, '張三', '數學', 76);
12 insert into kecheng (id, name, course, score)
13 values (1, '張三', '英語', 43);
14 insert into kecheng (id, name, course, score)
15 values (1, '張三', '歷史', 56);
16 insert into kecheng (id, name, course, score)
17 values (1, '張三', '化學', 11);
18 insert into kecheng (id, name, course, score)
19 values (2, '李四', '語文', 54);
20 insert into kecheng (id, name, course, score)
21 values (2, '李四', '數學', 81);
22 insert into kecheng (id, name, course, score)
23 values (2, '李四', '英語', 64);
24 insert into kecheng (id, name, course, score)
25 values (2, '李四', '歷史', 93);
26 insert into kecheng (id, name, course, score)
27 values (2, '李四', '化學', 27);
28 insert into kecheng (id, name, course, score)
29 values (3, '王五', '語文', 24);
30 insert into kecheng (id, name, course, score)
31 values (3, '王五', '數學', 25);
32 insert into kecheng (id, name, course, score)
33 values (3, '王五', '英語', 8);
34 insert into kecheng (id, name, course, score)
35 values (3, '王五', '歷史', 45);
36 insert into kecheng (id, name, course, score)
37 values (3, '王五', '化學', 1);
二、固定行列轉換
2.1、decode方式
select id,name,sum(decode(course,'語文',score,0)) 語文,--這裡使用max,min都可以
sum(decode(course,'數學',score,0)) 數學,
sum(decode(course,'英語',score,0)) 英語,
sum(decode(course,'歷史',score,0)) 歷史,
sum(decode(course,'化學',score,0)) 化學
2.2、case方式
select id,name,結果與上方一樣max(case when course='語文' then score else 0 end) 語文,
max(case when course='數學' then score else 0 end) 數學,
max(case when course='英語' then score else 0 end) 英語,
max(case when course='歷史' then score else 0 end) 歷史,
max(case when course='化學' then score else 0 end) 化學
from kecheng
group by id ,name
2.3、wmsys.wm_concat行列轉換函式
2.4、使用over(partition by t.u_id)用法
三、動態轉換3.1、使用pl/sql
declare--存放最終的sql
lv_sql varchar2(3000);
--存放連線的sql
sql_commond varchar2(3000);
--定義游標
cursor cur is
select course from kecheng group by course;
begin
--定義查詢開頭
sql_commond := 'select name ';
for i in cur loop
--將結果相連線
sql_commond := sql_commond || ' ,sum(decode(course,''' || i.course ||
''',score,0)) ' || i.course;
dbms_output.put_line(sql_commond);
end loop;
sql_commond := sql_commond || ' from kecheng group by name';
lv_sql := 'insert into temp_ss ' || sql_commond;
dbms_output.put_line(lv_sql);
execute immediate lv_sql;
end;
temp_ss 表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 轉換為 語文 數學 英...