簡單的行轉列,成績統計方式,oracle和mysql通用方式

  在看行轉列的時候,看到網上很多資料都寫的太複雜,我記錄一個比較簡單的方式,作爲自己行轉列的初步學習可以看看,解決比較複雜的業務問題可能幫不上忙,勿噴。

  主要實現思路就是,先將行轉成列,但是這個時候,會出現:

執行語句:

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章