SQL Server 中的行列转换示例
需积分: 49 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等)结合使用,以获取更直观的数据视图。
2012-06-16 上传
2012-06-26 上传
105 浏览量
2024-05-12 上传
2022-09-24 上传
2021-10-12 上传
qq_38152944
- 粉丝: 0
- 资源: 16
最新资源
- 火炬连体网络在MNIST的2D嵌入实现示例
- Angular插件增强Application Insights JavaScript SDK功能
- 实时三维重建:InfiniTAM的ros驱动应用
- Spring与Mybatis整合的配置与实践
- Vozy前端技术测试深入体验与模板参考
- React应用实现语音转文字功能介绍
- PHPMailer-6.6.4: PHP邮件收发类库的详细介绍
- Felineboard:为猫主人设计的交互式仪表板
- PGRFileManager:功能强大的开源Ajax文件管理器
- Pytest-Html定制测试报告与源代码封装教程
- Angular开发与部署指南:从创建到测试
- BASIC-BINARY-IPC系统:进程间通信的非阻塞接口
- LTK3D: Common Lisp中的基础3D图形实现
- Timer-Counter-Lister:官方源代码及更新发布
- Galaxia REST API:面向地球问题的解决方案
- Node.js模块:随机动物实例教程与源码解析