SQL使用PIVOT行转列查询学生平均成绩列无效报错咨询
问题根因
你编写的PIVOT语句报错的核心原因是:SourceTable子查询仅选取了Grades、Subject两个字段,未包含Student字段,因此外层SELECT语句无法识别不存在的Student列。
PIVOT运算符的逻辑是:将子查询中除了聚合字段、待旋转字段之外的所有字段自动作为分组依据,因此要按学生分组统计平均分,必须将Student字段包含在子查询的返回结果中。
正确实现代码
SELECT Student, [English], [Mathematics], [Science], [Programming], [History] FROM ( -- 子查询需要包含分组依据字段Student、聚合字段Grades、待旋转字段Subject SELECT Student, Grades, Subject FROM Grade_Report )AS SourceTable PIVOT ( AVG(Grades) -- 聚合计算两学期的平均成绩 FOR Subject IN([English], [Mathematics], [Science], [Programming], [History]) -- 指定要转为列的科目值 )AS PivotTable;
执行结果说明
执行上述语句后,会按学生维度分组,每列对应科目的值就是该学生两个学期该科目的平均成绩,完全符合预期需求。
内容的提问来源于stack exchange,提问作者Richard Johnson
相关产品推荐
相关产品推荐

