SQL行列转置

在数据处理中,有时候需要对数据表进行行列转置的操作。行列转置是指将表中的行变成列,将列变成行。在SQL语言中,可以通过pivot和unpivot操作来实现行列转置。
Pivot操作
Pivot操作用于将行转化为列,通常用于将某一列的值作为新表的列名。下面是一个示例展示如何使用pivot操作将行转置为列。
假设有如下的数据表Scores:
| Student | Subject | Score |
|---|---|---|
| Alice | Math | 85 |
| Alice | English | 78 |
| Bob | Math | 90 |
| Bob | English | 88 |
现在我们想要将每个学生的成绩转置为列,可以使用pivot操作:
SELECT *
FROM (
SELECT Student, Subject, Score
FROM Scores
) AS SourceTable
PIVOT (
MAX(Score)
FOR Subject IN ([Math], [English])
) AS PivotTable;
运行以上SQL语句后,得到的结果如下:
| Student | Math | English |
|---|---|---|
| Alice | 85 | 78 |
| Bob | 90 | 88 |
可以看到,我们成功将原本每个学生每门课的成绩转置为了以学生为行,科目为列的形式。
Unpivot操作
Unpivot操作与pivot相反,用于将列转化为行。下面是一个示例展示如何使用unpivot操作将列转置为行。
假设有如下的数据表Subjects:
| Student | Math | English |
|---|---|---|
| Alice | 85 | 78 |
| Bob | 90 | 88 |
现在我们想要将每个学生的每门课的成绩转置为行,可以使用unpivot操作:
SELECT Student, Subject, Score
FROM (
SELECT *
FROM Subjects
) AS SourceTable
UNPIVOT (
Score FOR Subject IN ([Math], [English])
) AS UnpivotTable;
运行以上SQL语句后,得到的结果如下:
| Student | Subject | Score |
|---|---|---|
| Alice | Math | 85 |
| Alice | English | 78 |
| Bob | Math | 90 |
| Bob | English | 88 |
可以看到,我们成功将原本每个学生每门课的成绩转置为了以学生、科目、成绩的形式。
通过以上示例,我们可以看到在SQL中如何使用pivot和unpivot操作来进行行列转置的操作。这些操作在数据处理和报表生成中有着非常广泛的应用,能够帮助我们更方便地对数据进行分析和展示。
极客教程