Oracle資料庫之行轉列與列轉行方法

2021-09-14 00:29:18 字數 2750 閱讀 4953

--建立縱表table_a

create

table table_a (

name varchar2(20)

, subject varchar2(20)

, score number(22,

0));

--向表table_a中插入資料

insert

into table_a (name, subject, score)

values

('張三'

,'語文',60

);insert

into table_a (name, subject, score)

values

('張三'

,'數學',70

);insert

into table_a (name, subject, score)

values

('張三'

,'英語',80

);insert

into table_a (name, subject, score)

values

('李四'

,'語文',90

);insert

into table_a (name, subject, score)

values

('李四'

,'數學'

,100

);

插入資料後table_a如下圖:

--建立縱表table_b

create

table table_b (

name varchar2(20)

, chinese number(22,

0), math number(22,

0), english number(22,

0));

--向表table_b中插入資料

insert

into table_b (name, chinese, math, english)

values

('張三',60

,70,80

);insert

into table_b (name, chinese, math, english)

values

('李四',90

,100,0

);

插入資料後table_b如下圖:

–縱表轉橫表table_a–>table_b

--方法一:使用case ... when ... then ... else ... end  函式

select name,

sum(

case subject when

'語文'

then score else

0end

)as chinese,

sum(

case subject when

'數學'

then score else

0end

)as math,

sum(

case subject when

'英語'

then score else

0end

)as english

from table_a

group

by name

--方法二:使用pivot

select

*from table_a pivot

(max

(score)

for subject in

('語文'

,'數學'

,'英語'

))

–橫表轉縱表table_b–>table_a

--方法一:使用union all

select name,

'語文'

as subject,chinese as score from table_b union

allselect name,

'數學'

as subject,math as score from table_b union

allselect name,

'英語'

as subject,english as score from table_b

order

by name,subject desc

--方法二:使用unpivot

select name,subject,score from table_b

unpivot

(score for subject in

(chinese,math,english)

)

資料庫之行轉列

有些是標準的sql函式 1 coalesce 空值替換函式。示例 coalesce col,replacement 如果col列的值為null,則col的值將被替換為 replacement 2 regexp split to table 行專列 該函式將對指定列的值進行分割,分割後的每個子串將轉成...

Oracle 行轉列與列轉行

oracel 行轉列與列轉行 一 列轉行 1.使用函式 wm concat 2.函式說明 該函式將某一列,根據條件轉換成一行 相當於把列裡的值合併,並用逗號區分各個值 3.例子 表 testt 中有資料如下所示 xh age 1 11 1 12 1 13 2 21 2 22 3 31 sql sel...

oracle資料庫實現行轉列和列轉行的Sql語句

oracle資料庫實現行轉列和列轉行的sql語句,知道的不知道的,大家一塊來重溫一下吧!列轉行create table test name char 10 km char 10 cj int insert test values 張三 語文 80 insert test values 張三 數學 8...