2015-07-06 144 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相關。在這種情況下,將視圖轉儲到臨時表中並在該表上運行數據透視表。或者,索引/物化視圖可能會有所幫助。