Sql查询显示一年中季度的学生数据

时间:2014-05-06 17:43:00

标签: sql-server

我想生成学生数据比较报告,其中比较学生的数据。下面是我想要获取数据的表格的屏幕截图。 enter image description here

enter image description here

我想比较一年中不同季度的学生数据。生成报告时,用户可以选择任何年份和任意数量的列进行比较,报告的格式应如下列所示:

名字姓氏2013 - 1评估A1 2013 - 2评估A1 2013 - 3评估A1 2013 - 4评估A1

在上面的列中,2013年是第1列是季度 谁能告诉我,如何使用sql查询实现上述数据?

1 个答案:

答案 0 :(得分:0)

如果您想要一个可能的年/季度/组合组合的列,则会出现问题。 SQL语言确实想知道在开始执行查询之前结果中有多少列和哪种列。你可以用PIVOT来缓解这个问题,但除非你愿意编写动态的sql,否则你无法真正避免它。

如果您将自己限制为一年,允许每年拥有自己的行集,或者想要使用SUM()或AVG()等聚合函数作为评估分数,则可以使用自联接执行某些操作,像这样:

 SELECT q1.StudentID, s.FirstName, s.LastName, s.IsActive
    q1.AssessmentA1 AS [2013 - 1 AssessmentA1], q2.AssessmentA1 AS [2013 - 2 AssessmentA1]
 FROM Assements q1
 INNER JOIN Assements q2 ON q2.Year = q1.Year and q2.Quarter = 2 and q2.StudentID = q1.StudentID
 INNER JOIN Assements q3 ON q3.Year = q1.Year and q3.Quarter = 3 and q3.StudentID = q1.StudentID
 INNER JOIN Assements q4 ON q4.Year = q1.Year and q4.Quarter = 4 and q4.StudentID = q1.StudentID
 INNER JOIN Students s on s.ID = q1.StudentID
 WHERE q1.Quarter = 1
     AND Year=2013

同样,我需要有关您希望如何处理年度小组的更多信息,以便为您提供完整的解决方案。