SQL Server 中的行列转换示例

需积分: 49 1 下载量 156 浏览量 更新于2024-09-07 收藏 2KB TXT 举报
"这篇文档是关于SQL Server中如何进行行列互换操作的示例,主要涉及到了`UNPIVOT`和`PIVOT`这两个SQL命令。" 在SQL Server中,行列互换是一种常见的数据转换操作,尤其在处理报表或数据分析时非常有用。它允许我们将表格中的列转换为行,或者将行转换为列。这里,我们重点讨论`UNPIVOT`和`PIVOT`两个关键字。 `UNPIVOT`操作是将数据从列转为行的过程。假设我们有一个名为`Student_Score`的表,它存储了学生姓名(sname)、课程名称(cname)和分数(score)。如果想要将课程名和对应的分数从列变为行,可以使用`UNPIVOT`。例如,如果我们有"Chinese"、"Math"和"English"三门课程,`UNPIVOT`可以将这些课程名作为新的行值,而分数作为对应的新列。以下是一个使用`UNPIVOT`的例子: ```sql SELECT sname, Class, Score FROM Grade UNPIVOT ( [Score] FOR [Class] IN([Chinese],[Math],[English]) ) AS UnpivotedGrades; ``` 这段代码会将原始的`Grade`表中的"Chinese"、"Math"和"English"列转换为`Class`列,并将分数放入`Score`列中。 相反,`PIVOT`操作是将行转换为列的过程。如果已经通过`UNPIVOT`操作将数据展平,但又希望恢复到原来的结构,可以使用`PIVOT`。例如,如果现在我们有一个包含学生姓名(sname)、科目(Class)和分数(Score)的表格,我们可以用`PIVOT`将科目名恢复为列: ```sql CREATE TABLE Score_Studnt( sname varchar(20), Chinese int, Math int, Physical int ); INSERT INTO dbo.Score_Studnt(sname, Chinese, Math, Physical) VALUES ('', 90, 92, 93); INSERT INTO dbo.Score_Studnt(sname, Chinese, Math, Physical) VALUES ('', 90, 92, 93); -- pivot操作 SELECT * FROM Score_Studnt PIVOT ( AVG(Score) FOR Class IN ([Chinese], [Math], [Physical]) ) AS PivotedGrades; ``` 这里,`PIVOT`将`Class`列的值("Chinese"、"Math"和"Physical")转换为新表的列,而`Score`列的平均值则填充到对应列中。 `UNPIVOT`和`PIVOT`是SQL Server中用于数据重塑的强大工具,它们可以帮助我们根据需求灵活地变换数据结构,以便更好地进行分析和展示。在实际工作中,这两个操作通常与聚合函数(如AVG、SUM等)结合使用,以获取更直观的数据视图。