-- 表二
stuID | course | Score
1 | 數學 | 97
1 | 語文 | 70
1 | 英語 | 88
2 | 數學 | 92
stuID | stuName | 語文 | 數學 | 英語
1 | 小明 | 70 | 97 | 88
2 | 小紅 | NULL | 92 | NULL
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(預存過程/應用層拼接)或使用數據庫特定語法:
PIVOTPIVOT / LISTAGGcrosstab (tablefunc 擴展)