SQL Server透视多个表
我们有以下表格: 表1:学生记录SQL Server透视多个表,sql,sql-server,pivot,Sql,Sql Server,Pivot,我们有以下表格: 表1:学生记录 学生ID |课程ID |期间|年级 12 6010 P1 90 236020p180 12 6030 P2''空白,没有等级 15 6010 P1 70 126020 P1 80 156020 p190 表2:课程记录 CourseID CourseDC学分 6010数学3 6020生物学3 6030英语3 表3:学生信息 StudentID FirstName LastName ClassYear 12乔·史密斯2013 15泽里2013 23 Pete
学生ID |课程ID |期间|年级
12 6010 P1 90 236020p180 12 6030 P2''空白,没有等级 15 6010 P1 70 126020 P1 80 156020 p190
表2:课程记录
CourseID CourseDC学分
6010数学3 6020生物学3 6030英语3 表3:学生信息
StudentID FirstName LastName ClassYear
12乔·史密斯2013 15泽里2013 23 Pete Vo 2013
结果愿望:
学年姓氏姓氏学生ID数学生物学
2013史密斯乔12 90 80
2013年李泽157090
如何使用pivot命令实现此结果?通过join查询出数字和课程,以便最终得到
StudentID CourseDec Grade
1 Math 20
1 Woodwork 82
StudentID Math WoodWork
1 20 82
你最终得到的支点
StudentID CourseDec Grade
1 Math 20
1 Woodwork 82
StudentID Math WoodWork
1 20 82
然后回到学生中,获取名字和其他名称。您可以使用PIVOT,但这需要您知道您感兴趣的课程描述
SELECT p.classyear,
p.lastname,
p.firstname,
p.studentid,
pvt.math,
pvt.biology
FROM (SELECT sr.grade,
si.classyear,
si.studentid,
si.firstname,
silastname
FROM student_info si
INNER JOIN student_records sr
ON si.studentid = sr.studentid
INNER JOIN course_records cr
ON sr.courseid = cr.courseid) p PIVOT ( AVG (grade) FOR
coursedec IN (
[Math], [Biology]) ) AS pvt
ORDER BY pvt.classyear;
请注意,您可以使用动态HTML在添加更多课程时调整查询:
输出中不包括Pete Vo的任何原因?为什么不包括英语?我没有包括Pete Vo,因为我只是想对我想要达到的目标给出一个大概的想法。我有至少200多名学生,每个学期至少修8门课。哇,每个学生在第一节课上修的13门课是相同的,但在最后两节课上,他们将修不同的课。。。谢谢你的回复。:)尼斯Data.SE查询,但您可能希望删除第一个结果集,因为您需要选择纯文本结果才能查看多个结果集