【Teradata SQL】行轉列、列轉行的簡單實現


1.多行轉多列

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

(1)使用PIVOT函數

SELECT *
FROM student
PIVOT (
 SUM(score) FOR subject IN (語文, 數學, 英語)
)   #默認按照score和subject以外其它字段進行group by

(2)使用Case When

結果跟上述函數一致,但是當涉及字段較多時,使用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

2.多列轉多行

 

(1)使用UNPIVOT函數

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

(2)使用Case When

結果跟上述函數一致,但是當涉及字段較多時,使用case when書寫可能不太直觀。

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

3.多行轉一列

 多行轉一列函數TDStats.udfConcat

 

參考文檔:

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM