在看行轉列的時候,看到網上很多資料都寫的太複雜,我記錄一個比較簡單的方式,作爲自己行轉列的初步學習可以看看,解決比較複雜的業務問題可能幫不上忙,勿噴。
主要實現思路就是,先將行轉成列,但是這個時候,會出現:
執行語句:
SELECT NAME
姓名,
CASE
SUBJECT
WHEN '語文' THEN
score
END 語文,
CASE
SUBJECT
WHEN '數學' THEN
score
END 數學,
CASE
SUBJECT
WHEN '英語' THEN
score
END 英語
FROM
student
效果圖:
這種結果,然後就需要使用聚合函數來將數據合併到一列,因爲這裏是分數,使用sum求和函數,如果是字符串的話可以用concat來聚合。
下面是實現過程:
數據示例:
轉換效果:
1、oracle-decode方式:
SELECT
NAME 姓名,
sum( decode( SUBJECT, '語文', score, 0 ) ) 語文,
sum( decode( SUBJECT, '數學', score, 0 ) ) 數學,
sum( decode( SUBJECT, '英語', score, 0 ) ) 英語
FROM
student
GROUP BY
NAME
2、mysql,oracle 通用方式,使用case when的方式:
SELECT
NAME 姓名,
sum( CASE SUBJECT WHEN '語文' THEN score END ) 語文,
sum( CASE SUBJECT WHEN '數學' THEN score END ) 數學,
sum( CASE SUBJECT WHEN '英語' THEN score END ) 英語
FROM
student
GROUP BY
NAME