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

SQL 行轉列:用子查詢將多行課程成績轉為單行多列

     編輯:程式設計疑難解答

表結構:member(學生)、F(課程)、Score(成績)。需輸出:姓名、英語、數學、語文、歷史——每位學生一行。

錯誤寫法分析

原 SQL 從 Score, member, F 多表連接作主查詢,子查詢 SELECT m1.MName FROM member AS m1 返回多行,導致「子查詢返回值不止一個」錯誤。

正確思路:主表應為學生表

SELECT 
    m.MName AS 姓名,
    (SELECT Score FROM Score WHERE FID='F001' AND MID=m.MID) AS 英語,
    (SELECT Score FROM Score WHERE FID='F002' AND MID=m.MID) AS 數學,
    (SELECT Score FROM Score WHERE FID='F003' AND MID=m.MID) AS 語文,
    (SELECT Score FROM Score WHERE FID='F004' AND MID=m.MID) AS 歷史
FROM member m;

關鍵點

  • 主查詢 FROM member,保證每位學生一行。
  • 每科成績用相關子查詢,條件關聯外層 m.MID。
  • 若某科無成績,子查詢返回 NULL,不影響主行。

這是標準的「行轉列」寫法,清晰且效能可接受(課程數固定少時)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved