SQL Server 表格转置示例:添加平均分与总分
需积分: 3 183 浏览量
更新于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-19 上传
2012-03-06 上传
2018-09-21 上传
thecommonpeople
- 粉丝: 0
- 资源: 3
最新资源
- cpu-clock-ticks:纯javascript实现以获取`sysconf(_SC_CLK_TCK))`值
- 十字路口:中国金融科技的新篇章》.rar
- think-config:配置ThinkJS 3.x
- Excel模板00科目汇总表.zip
- 毕业设计&课设--超市供销存管理系统,超市管理系统,供销存管理系统,进销存,JAVA+MySQL毕业设计.zip
- 高光谱图像分解:卷积神经网络的高光谱图像分解(无分叉,半成品)
- pex-helpers:为 pex 库调试网格生成器
- goertzeljs:Goertzel算法的纯JavaScript实现
- 同心视界-VR未来课堂-2019.4-51页.rar
- java_practice
- react-native-luna-star-prnt:React适用于LunaPOS的本机StarPRNT库
- Excel模板收据模板(样本).zip
- 毕业设计&课设--毕业设计之网上订餐系统.zip
- Real-time-log-analysis-system:基于spark stream + flume + kafka + hbase的实时日志处理分析系统(分为控制台版本和基于springboot,Echarts等的Web UI可视化版本)
- hyper-json:带有链接的 Json!
- 漂亮的配置x标准