SQL Server 中的行列转换示例
需积分: 49 189 浏览量
更新于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等)结合使用,以获取更直观的数据视图。
128 浏览量
306 浏览量
点击了解资源详情
758 浏览量
220 浏览量
3110 浏览量
2024-05-12 上传
2022-09-24 上传
2022-09-20 上传
qq_38152944
- 粉丝: 0
- 资源: 16
最新资源
- servo-example-0.5.2.zip
- net.tsinghua:针对清华学生的跨平台自动登录实用程序
- 49个苹果app图标 .sketch素材下载
- 基于HTML实现的仿享客零食网触屏版html5手机wap购物网站模板下载(css+html+js+图样).zip
- 单片机太阳能路灯控制系统仿真protues
- node-simple-deploy
- HWHelpNow:hwhelpnow.com官方GitHub Repo
- yii2-widgets:Yii Framework 2.0有用的小部件集合
- 易语言复制组件到选择夹子夹
- MDB_3.0,999玫瑰c语言表白源码,c语言
- dotfiles:每天使用.dotfiles
- storemate-backend-leveldb-0.9.23.zip
- 基于ASP.net数据存储与交换系统设计(源代码+论文).rar
- Javascript-30-WesBos
- 夸克:离线时保持快乐| 世界上第一个离线搜索引擎
- Recipes