要查找多个学生注册记录的最高分数,像KG和PS这样的alpha等级显示为最大值,即使等级12为"更高"。有没有办法将非数字成绩设置为00,因此它们不会显示为最大值(除非学生仅注册非数字成绩)。我尝试了以下内容,甚至无法编译。编译器不喜欢"当不在"。提前感谢任何可行的解决方案。如果一名学生从KG到09年就读了最近10年...我想将09视为最高年级。
DECLARE @grade char(2);
SET @grade='00'
Select
SD.[Student_Number] as [Student_Number],
Max (SE.[Grade_Level]) as [Grade_Level],
CASE SE.[Grade_Level]
when not in ('01','02','03','04','05','06','07',''08',''09','10','11','12')
then @grade
else (SE.[Grade_Level])
End
From
Student_DemographicsCube as SD WITH (NOLOCK),
Student_EnrollmentCube as SE WITH (NOLOCK)
Where
SD.[Student_ID] = SE.[Student_ID]
Group By
SD.[Student_Number]
Order By
SD.[Student_Number]
答案 0 :(得分:0)
您的查询有一些问题。首先,您应该使用显式JOIN语法。其次,CASE
表达式和Max()
语法没有正确格式化。尝试使用:
Select
SD.[Student_Number] as [Student_Number],
Max(CASE when SE.[Grade_Level] not in ('01','02','03','04','05','06','07','08','09','10','11','12')
then @grade
else SE.[Grade_Level]
End) as [Grade_Level]
From Student_DemographicsCube as SD WITH (NOLOCK)
Inner Join Student_EnrollmentCube as SE WITH (NOLOCK)
ON SD.[Student_ID] = SE.[Student_ID]
Group By SD.[Student_Number]
Order By SD.[Student_Number];
您会注意到我已将WHERE SD.[Student_ID] = SE.[Student_ID]
移至INNER JOIN
以明确您正在加入表格。然后CASE
表达式的语法是CASE WHEN <some condition> THEN <something> ELSE <something else> END
,它被置于MAX()
聚合函数内部。这应该可以解决您遇到的语法问题。