SQL 列轉行 行轉列 的方法

2021-09-29 03:35:46 字數 3246 閱讀 5360

-- 建立表

-- 插入資料

insert

into col_to_row (user_name,course,score)

values

('張三'

,'語文',58

);insert

into col_to_row (user_name,course,score)

values

('張三'

,'數學',34

);insert

into col_to_row (user_name,course,score)

values

('張三'

,'英語',58

);insert

into col_to_row (user_name,course,score)

values

('李四'

,'語文',87

);insert

into col_to_row (user_name,course,score)

values

('李四'

,'數學',45

);insert

into col_to_row (user_name,course,score)

values

('李四'

,'英語',45

);insert

into col_to_row (user_name,course,score)

values

('王五'

,'語文',34

);insert

into col_to_row (user_name,course,score)

values

('王五'

,'數學',76

);insert

into col_to_row (user_name,course,score)

values

('王五'

,'英語',89

);

-- 列轉行

-- 方法一

select

user_name ,

max(

case course when

'語文'

then score else

0end

) 語文,

max(

case course when

'數學'

then score else

0end

) 數學,

max(

case course when

'英語'

then score else

0end

) 英語

from col_to_row

group

by user_name;

max的作用 當我們執行如下**時 未加max

select 

user_name,

(case course when

'數學'

then score else

0end

)as 數學,

(case course when

'語文'

then score else

0end

)as 語文,

(case course when

'英語'

then score else

0end

)as 英語

from col_to_row ;

結果如下:

當新增max後

實際上max可以換成其他一些聚合函式如min

--方法二

select

user_name,

(select score from col_to_row b where course=

'數學'

and a.user_name = b.user_name)

as 數學,

(select score from col_to_row b where course=

'語文'

and a.user_name = b.user_name)

as 語文,

(select score from col_to_row b where course=

'英語'

and a.user_name = b.user_name)

as 英語

from col_to_row a group

by user_name;

結果

列轉行 行轉列

問題 使用case when實現行轉列 解決 1 測試準備 create table studentscores username nvarchar2 20 學生姓名 subject nvarchar2 30 科目 score float 成績 2 準備資料 insert into students...

列轉行,行轉列總結

此函式在oracle版本12g以後廢棄,不可使用 解決方法 列轉行 使用 sys connect by path 函式替代 listagg函式 自從since oracle 9i 開始,就可以通過 sys connect by path 函式實現將從父節點到當前行內容以 path 或者層次元素列表的...

Hive列轉行 行轉列

簡單說一下hive行轉列 列轉行的方式。這玩意sql,語法它對嗎?就擱這列轉行?浪費時間!先拿這個資料來實現乙個簡單的行轉列和列轉行 表名就都叫hero吧,英雄屬性 hero type 英雄名s hero names 英雄名 hero name 行轉列也就是上面的表1到表2。select hero ...