SQL Server中如何使用PIVOT和UNPIVOT实现行转列和列转行
在SQL Server中,有时我们需要将表中的行数据转换为列数据,或者将列数据转换为行数据,这种操作称为行转列或列转行。SQL Server提供了两个内置的函数来实现这种功能,分别是PIVOT和UNPIVOT。
PIVOT函数可以将表中的某一列的值作为新表的列名,然后根据另一列的值进行分组聚合,从而实现行转列。UNPIVOT函数则是反过来,将表中的多个列名作为新表的一列的值,然后根据另一列的值进行分组展开,从而实现列转行。
下面我们通过一个简单的例子来演示如何使用PIVOT和UNPIVOT函数。
假设我们有一个学生表(Student),记录了每个学生的姓名、科目和成绩,如下所示:
| 姓名 | 科目 | 成绩 |
| 张三 | 语文 | 80 |
| 张三 | 数学 | 90 |
| 张三 | 英语 | 85 |
| 李四 | 语文 | 75 |
| 李四 | 数学 | 95 |
| 李四 | 英语 | 80 |
| 王五 | 语文 | 70 |
| 王五 | 数学 | 80 |
| 王五 | 英语 | 75 |
如果我们想要将科目作为列名,然后显示每个学生在每个科目的成绩,我们可以使用PIVOT函数,如下所示:
SELECT 姓名, [语文], [数学], [英语]
MAX(成绩) -- 聚合函数
FOR 科目 IN ([语文], [数学], [英语]) -- 列名列表
执行上述语句后,我们可以得到如下结果:
| 姓名 | 语文 | 数学 | 英语 |
可以看到,我们成功地将行数据转换为了列数据。