ORACLE學習筆記 合併多行資料到一行中

2021-08-27 13:04:19 字數 2078 閱讀 1920

本人使用

oracle

時,遇到以下情況:需要輸出多列資料,但是這些資料卻分布在多行的同一列中。所以本人就想出了以下這種方式進行合併查詢。

示例是乙個

grades

表,記錄每個學生的姓名、課程和分數,分數都放在

grade

列中,現在要將各個科目的分數放到一行中顯示怎麼辦?

create table grades

( id number primary key,

name varchar2(10) not null,

course varchar2(10) not null,

grade number not null

);commit;

delete from grades;

commit;

insert into grades(id,name,course,grade) values(1,'周健','sx',78);

insert into grades(id,name,course,grade) values(2,'周健','yw',88);

insert into grades(id,name,course,grade) values(3,'周健','wl',42);

insert into grades(id,name,course,grade) values(4,'周健','hx',100);

insert into grades(id,name,course,grade) values(5,'張海威','sx',69);

insert into grades(id,name,course,grade) values(6,'張海威','yw',95);

insert into grades(id,name,course,grade) values(7,'張海威','wl',46);

insert into grades(id,name,course,grade) values(8,'張超','sx',31);

insert into grades(id,name,course,grade) values(9,'張超','yw',97);

insert into grades(id,name,course,grade) values(10,'張超','hx',89);

commit;

select 

name 姓名,

nvl(sum(decode(course,'sx',grade))||'','未修') 數學,

nvl(sum(decode(course,'yw',grade))||'','未修') 語文,

nvl(sum(decode(course,'wl',grade))||'','未修') 物理,

nvl(sum(decode(course,'hx',grade))||'','未修') 化學

from grades

group by name;

其實,這個

sql語句的第一步是將每一行記錄進行擴充套件,使用

decode

函式將記錄分數的一列資料,擴充套件成為分別記錄各個科目分數的多列資料。第二步,使用

group by

對每個人進行分組,然後合併分組,得到資料。

select 

name 姓名,

nvl(sum(sx)||'','未修') 數學,

nvl(sum(yw)||'','未修') 語文,

nvl(sum(wl)||'','未修') 物理,

nvl(sum(hx)||'','未修') 化學

from

( select

name,

decode(course,'sx',grade) sx,

decode(course,'yw',grade) yw,

decode(course,'wl',grade) wl,

decode(course,'hx',grade) hx

from grades

)group by name;

Oracle多行資料合併

1.多個未知數值合併 selectoperate id,max substr phone id,2 phone id from select operate id,sys connect by path phone id,phone id from select operate id,phone i...

MySQL 多行資料合併 GROUP CONCAT

表結構及資料 drop table if exists course create table course id int 11 not null,name varchar 50 default null comment 姓名 course name varchar 50 default null ...

MySQL 多行資料合併 GROUP CONCAT

表結構及資料 drop table if exists course create table course name varchar 255 character set utf8 collate utf8 general ci default null,course name varchar 25...