首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

SQL 行轉列:條件聚合實現課程成績橫向展示

     編輯:程式設計綜合問答

源數據


-- 表二
stuID | course | Score
1     | 數學   | 97
1     | 語文   | 70
1     | 英語   | 88
2     | 數學   | 92

目標結果


stuID | stuName | 語文 | 數學 | 英語
1     | 小明    | 70   | 97   | 88
2     | 小紅    | NULL | 92   | NULL

SQL (條件聚合)


SELECT
    t1.stuID,
    t1.stuName,
    SUM(CASE WHEN t2.course = '語文' THEN t2.Score END) AS 語文,
    SUM(CASE WHEN t2.course = '數學' THEN t2.Score END) AS 數學,
    SUM(CASE WHEN t2.course = '英語' THEN t2.Score END) AS 英語
FROM 表一 t1
LEFT JOIN 表二 t2 ON t1.stuID = t2.stuID
GROUP BY t1.stuID, t1.stuName;

進階:動態列 (未知課程)

需動態構建 SQL(預存過程/應用層拼接)或使用數據庫特定語法:

  • SQL Server: PIVOT
  • Oracle: PIVOT / LISTAGG
  • PostgreSQL: crosstab (tablefunc 擴展)
  • MySQL: 僅支持條件聚合,動態列需應用層生成 SQL。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved