SQL行轉列、列轉行的簡單實現

這篇文章主要給大家介紹了關於SQL行轉列、列轉行的簡單實現方法,文中通過示例代碼介紹的非常詳細,對大家學習或者使用SQL具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧

前言

行列轉換在做報表分析時還是經常會遇到的,今天就說一下如何實現行列轉換吧。

行列轉換就是如下圖所示兩種展示形式的互相轉換

行轉列

假如我們有下表:

SELECT *
FROM student
PIVOT (
 SUM(score) FOR subject IN (語文, 數學, 英語)
)

通過上面 SQL 語句即可得到下面的結果

PIVOT 後跟一個聚合函數來拿到結果,FOR 後面跟的科目是我們要轉換的列,這樣的話科目中的語文、數學、英語就就被轉換爲列。IN 後面跟的就是具體的科目值。

當然我們也可以用 CASE WHEN 得到同樣的結果,就是寫起來麻煩一點。

SELECT name,
 MAX(
 CASE
 WHEN subject='語文'
 THEN score
 ELSE 0
 END) AS "語文",
 MAX(
 CASE
 WHEN subject='數學'
 THEN score
 ELSE 0
 END) AS "數學",
 MAX(
 CASE
 WHEN subject='英語'
 THEN score
 ELSE 0
 END) AS "英語"
FROM student
GROUP BY name

使用 CASE WHEN 可以得到和 PIVOT 同樣的結果,沒有 PIVOT 簡單直觀。

列轉行

假設我們有下表 student1

SELECT *
FROM student1
UNPIVOT (
  score FOR subject IN ("語文","數學","英語")
)

通過 UNPIVOT 即可得到如下結果:

我們也可以使用下面方法得到同樣結果

SELECT
  NAME,
  '語文' AS subject ,
  MAX("語文") AS score
FROM student1 GROUP BY NAME
UNION
SELECT
  NAME,
  '數學' AS subject ,
  MAX("數學") AS score
FROM student1 GROUP BY NAME
UNION
SELECT
  NAME,
  '英語' AS subject ,
  MAX("英語") AS score
FROM student1 GROUP BY NAME

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對神馬文庫的支持。

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