我想生成学生数据比较报告,其中比较学生的数据。下面是我想要获取数据的表格的屏幕截图。
我想比较一年中不同季度的学生数据。生成报告时,用户可以选择任何年份和任意数量的列进行比较,报告的格式应如下列所示:
在上面的列中,2013年是第1列是季度 谁能告诉我,如何使用sql查询实现上述数据?
答案 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
同样,我需要有关您希望如何处理年度小组的更多信息,以便为您提供完整的解决方案。