sql行列互相裝換的sql語句

2021-10-09 10:26:01 字數 3593 閱讀 6205

create table kecheng

( id number,

name varchar2(20),

course varchar2(20),

score number

);-- 插入測試資料

insert into kecheng (id, name, course, score)

values (1, '張三', '語文', 67);

insert into kecheng (id, name, course, score)

values (1, '張三', '數學', 76);

insert into kecheng (id, name, course, score)

values (1, '張三', '英語', 43);

insert into kecheng (id, name, course, score)

values (1, '張三', '歷史', 56);

insert into kecheng (id, name, course, score)

values (1, '張三', '化學', 11);

insert into kecheng (id, name, course, score)

values (2, '李四', '語文', 54);

insert into kecheng (id, name, course, score)

values (2, '李四', '數學', 81);

insert into kecheng (id, name, course, score)

values (2, '李四', '英語', 64);

insert into kecheng (id, name, course, score)

values (2, '李四', '歷史', 93);

insert into kecheng (id, name, course, score)

values (2, '李四', '化學', 27);

insert into kecheng (id, name, course, score)

values (3, '王五', '語文', 24);

insert into kecheng (id, name, course, score)

values (3, '王五', '數學', 25);

insert into kecheng (id, name, course, score)

values (3, '王五', '英語', 8);

insert into kecheng (id, name, course, score)

values (3, '王五', '歷史', 45);

insert into kecheng (id, name, course, score)

values (3, '王五', '化學', 1);

commit;

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)) 化學

from kecheng

group by id ,name

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

-- (3) wmsys.wm_concat行列轉換函式

select id,name,

wmsys.wm_concat(course || ':'||score) course

from kecheng

group by id ,name;

-- (4) 使用over(partition by t.u_id)用法

select name, wmsys.wm_concat(course ||score) over (partition by name) from kecheng

-- (5) 使用povot函式

select * from ( select id , name , score , course from kecheng) pivot (sum(score) for course in ('數學','化學','英語','語文','歷史') )

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);

commit;

select id , name, jidu, xiaoshou from fruit unpivot (xiaoshou for jidu in (q1, q2, q3, q4) )
select id, name ,'q1' jidu, (select q1 from fruit where 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

sql 語句寫的行列轉換

以前面試老遇到乙個行列轉換的問題,今天沒事,順便記錄一下 假設有這樣一張表,如下圖,建立表就不說了,直接建或者sql語句都行 sql語句如下 第一種 select name as 姓名,max case subject when 語文 then result else 0 end as 語文,max...

SQL語句 子查詢 行列互換 if語句

select a.date range,user a.user id,a.project,group sum if a.staus pushed to a.ct,0 as pushed to sum if a.staus pushed new a.ct,0 as pushed new sum if ...

行列轉換等經典SQL語句

在企業應用中,經常會開發報表系統,而在報表中又經常用到行列轉換,這裡有乙個經典的應用例項 原表 姓名 科目 成績 張三 語文 80 張三 數學 90 張三 物理 85 李四 語文 85 李四 物理 82 李四 英語 90 李四 政治 70 王五 英語 90 轉換後的表 姓名 數學 物理 英語 語文 ...