我有看起来像数据标准化
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