在 SQL 中,如何实现行列转换?请给出具体示例。
答题要点
在 SQL 中,行列转换通常有两种情况:行转列和列转行。行转列可以使用 CASE 语句结合聚合函数来实现。例如,有一个学生成绩表 `scores`,包含 `student_id`、`subject` 和 `score` 三列,要将每个学生的不同科目成绩转换为列。示例代码如下: sql SELECT student_id, SUM(CASE WHEN subject = 'Math' THEN score ELSE 0 END) AS Math_score, SUM(CASE WHEN subject = 'English' THEN score ELSE 0 END) AS English_score FROM scores GROUP BY student_id; 在上述代码中,使用 CASE 语句根据科目进行判断,将对应科目成绩进行求和,从而实现行转列。列转行可以使用 UNPIVOT 关键字(部分数据库支持)或使用 UNION ALL 来实现。例如,有一个表 `student_scores` 包含 `student_id`、`Math_score` 和 `English_score` 三列,要将科目成绩转换为行。示例代码如下: sql SELECT student_id, 'Math' AS subject, Math_score AS score FROM student_scores UNION ALL SELECT student_id, 'English' AS subject, English_score AS score FROM student_scores; 通过 UNION ALL 将不同科目的成绩合并为一列,实现列转行。