我有看起來像數據標準化
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列」。有人可以幫助這種查詢的語法和結構。
難道還有比內加入了一個更好的辦法?如果有更高效的方法來標準化這張桌子,請讓我知道?
這是在sqlserver? – Tschallacka
是的 - sqlserver –
自我加入!理想情況下,您應該從一開始就存儲Raw,Grade,Mpd和Rank列。 – jarlh