SQL Server 表格转置示例:添加平均分与总分
需积分: 3 185 浏览量
更新于2024-09-16
收藏 6KB TXT 举报
本文档主要介绍了如何在SQL Server数据库中使用不同的查询方法,针对一个名为`tb`的表,该表包含学生的姓名、所选课程以及对应分数,进行行列转换以展示每个学生在特定课程(最初仅限于语文、数学和物理)的最高分、最低分(这里假设没有提及最低分,但可以添加),以及如何扩展到SQL Server 2005版本来处理动态课程列表。在SQL Server 2000中,通过静态SQL查询,首先通过CASE语句分别计算每个学生的各科成绩,然后使用GROUP BY按姓名进行分组。对于SQL Server 2005,引入了Pivot操作来更方便地组织数据,使得结果集中显示课程列名和对应的分数。
为了实现题目中的要求,即在已有查询的基础上添加平均分和总分,我们需要对SQL查询进行适当的修改。首先,在静态SQL查询中,可以在每行数据之后添加平均分和总分的计算,例如:
```sql
-- SQL SERVER 2000 静态SQL (扩展)
SELECT 姓名,
MAX(CASE WHEN 课程 = '语文' THEN 分数 ELSE 0 END) AS 语文,
MAX(CASE WHEN 课程 = '数学' THEN 分数 ELSE 0 END) AS 数学,
MAX(CASE WHEN 课程 = '物理' THEN 分数 ELSE 0 END) AS 物理,
AVG(分数) AS 平均分,
SUM(分数) AS 总分
FROM tb
GROUP BY 姓名
```
对于SQL Server 2005,由于Pivot操作已经将分数聚合到了特定课程列,我们可以在查询结束后添加额外的计算:
```sql
-- SQL SERVER 2005 静态SQL (扩展)
WITH CourseScores AS (
SELECT * FROM (SELECT * FROM tb) a
PIVOT (MAX(分数) FOR 课程 IN (语文, 数学, 物理)) b
)
SELECT 姓名,
语文,
数学,
物理,
AVG(CAST(SUM(分数) OVER (PARTITION BY 姓名) AS REAL)) AS 平均分,
SUM(分数) AS 总分
FROM CourseScores
```
动态SQL在这里可能不再适用,因为Pivot操作已经处理了课程和分数的组合。如果要支持动态课程,你可能需要先创建一个包含所有可能课程的临时表,然后在外部查询中再次进行Pivot或使用其他方法。
总结,这些示例展示了如何在SQL Server中处理行列转换,同时演示了如何逐步增加复杂度以满足额外的统计需求,如平均分和总分。这些查询不仅适用于固定课程列表,还能扩展到动态课程列表,提升了数据分析的灵活性。
2011-11-18 上传
2020-03-27 上传
2011-03-05 上传
点击了解资源详情
2023-06-09 上传
点击了解资源详情
2019-03-31 上传
2012-03-06 上传
2013-11-05 上传
thecommonpeople
- 粉丝: 0
- 资源: 3
最新资源
- Fisher Iris Setosa数据的主成分分析及可视化- Matlab实现
- 深入理解JavaScript类与面向对象编程
- Argspect-0.0.1版本Python包发布与使用说明
- OpenNetAdmin v09.07.15 PHP项目源码下载
- 掌握Node.js: 构建高性能Web服务器与应用程序
- Matlab矢量绘图工具:polarG函数使用详解
- 实现Vue.js中PDF文件的签名显示功能
- 开源项目PSPSolver:资源约束调度问题求解器库
- 探索vwru系统:大众的虚拟现实招聘平台
- 深入理解cJSON:案例与源文件解析
- 多边形扩展算法在MATLAB中的应用与实现
- 用React类组件创建迷你待办事项列表指南
- Python库setuptools-58.5.3助力高效开发
- fmfiles工具:在MATLAB中查找丢失文件并列出错误
- 老枪二级域名系统PHP源码简易版发布
- 探索DOSGUI开源库:C/C++图形界面开发新篇章