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

Sql server Sql查询以显示一年中各季度的学生数据,sql-server,Sql Server,我想生成学生数据比较报告,比较学生的数据。下面是我想从中获取数据的表的屏幕截图。 我想比较一年中不同季度的学生数据。生成报告时,用户可以选择任意年份和任意数量的列进行比较,报告的格式应如下列所示: 姓名姓名2013-1评估A1 2013-2评估A1 2013-3评估A1 2013-4评估A1 在上述各列中,2013年为年度,第1列为季度 有人能告诉我,如何使用sql查询实现上述数据吗?如果您想为任何可能的年度/季度/资产组合创建一个列,您有一个问题。SQL语言在开始执行查询之前,确实想知道结果

我想生成学生数据比较报告,比较学生的数据。下面是我想从中获取数据的表的屏幕截图。

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

姓名姓名2013-1评估A1 2013-2评估A1 2013-3评估A1 2013-4评估A1 在上述各列中,2013年为年度,第1列为季度
有人能告诉我,如何使用sql查询实现上述数据吗?

如果您想为任何可能的年度/季度/资产组合创建一个列,您有一个问题。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

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

谢谢您的回复,但在我的情况下,列和年份是动态的,因此我可能不得不在代码末尾这样做。