2015-07-06 146 views
1

我有看起来像数据标准化

Year Semester Studentid AssessmentCode Hdg1 Hdg2 Result 
2015  2   122   10ENG   Ass1 Raw  80 
2015  2   122   10ENG   Ass1 Grade  B 
2015  2   122   10ENG   Ass1 Mpd  85 
2015  2   122   10ENG   Ass1 Rank  25 
2015  2   122   10ENG   Ass2 Raw  78 
2015  2   122   10ENG   Ass2 Grade  B 
2015  2   122   10ENG   Ass2 Mpd  83 
2015  2   122   10ENG   Ass2 Rank  28 
2015  2   287   10ENG   Ass1 Raw  70 
2015  2   287   10ENG   Ass1 Grade  C 
2015  2   287   10ENG   Ass1 Mpd  78 
2015  2   287   10ENG   Ass1 Rank  43 
2015  2   287   10ENG   Ass2 Raw  82 
2015  2   287   10ENG   Ass2 Grade  B 
2015  2   287   10ENG   Ass2 Mpd  88 
2015  2   287   10ENG   Ass2 Rank  10 

等表学生评估数据......

这真的很难一起工作,并使用分析软件来看看对于趋势,业绩变化等,我真的需要标准化的数据看起来像

Year Semester Studentid AssessmentCode Hdg1 Raw Grade Mpd Rank 
2015  2   122   10ENG   Ass1 80  B  85 25 
2015  2   122   10ENG   Ass2 78  B  83 28 
2015  2   287   10ENG   Ass1 70  C  78 43 
2015  2   287   10ENG   Ass2 82  B  88 10 

我一直在使用枢轴式看起来像这样创建的查询...

SELECT Year, 
     Semester, 
     StudentID, 
     AssessmentCode, 
     Hdg1, 
     [Raw], 
     [Grade], 
     [Mpd], 
     [Rank] 
FROM (Select vStudentReportsSemesterResults.Year, 
      vStudentReportsSemesterResults.Semester, 
      vStudentReportsSemesterResults.studentID, 
      vStudentReportsSemesterResults.AssessmentCode, 
      vStudentReportsSemesterResults.Hdg1,  
      vStudentReportsSemesterResults.Hdg2, 
      vStudentReportsSemesterResults.Result 
      from vStudentReportsSemesterResults) sq 
      PIVOT (Max (sq.Result) FOR sq.Hdg2 IN ([Raw], [Grade], [Mpd], [Rank])) AS pt 
where AssessAreaHdgAbbrev1 like 'Ass%' 
order by AssessmentCode, Hdg1, studentid 

现在这个工作,需要的击打相当长一段时间才能返回结果(约1分钟300,000行)我正在超时问题,当我尝试在多次运行它。

是否有设置此功能是更有效和更快速运行的更好的办法?我正在考虑内部连接,但我不确定所需的语法以及如何设置,因为我认为您需要4个连接才能获得'Raw','Grade','Mpd'和'Rank 4列”。有人可以帮助这种查询的语法和结构。

难道还有比内加入了一个更好的办法?如果有更高效的方法来标准化这张桌子,请让我知道?

+0

这是在sqlserver? – Tschallacka

+0

是的 - sqlserver –

+0

自我加入!理想情况下,您应该从一开始就存储Raw,Grade,Mpd和Rank列。 – jarlh

回答

0

我认为指数将有助于此查询。尝试在vStudentReportsSemesterResults(AssessAreaHdgAbbrev1, year, semester, studentId, AssessmentCode, Hdg1)上创建索引。

如果表名前面的“v”确实表示“view”,那么你的性能问题可能与视图有关,而不是与pivot相关。在这种情况下,将视图转储到临时表中并在该表上运行数据透视表。或者,索引/物化视图可能会有所帮助。