SQL Server透视多个表

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

我们有以下表格:

表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 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查询,但您可能希望删除第一个结果集,因为您需要选择纯文本结果才能查看多个结果集