2017-05-25 47 views
1

要查找多個學生註冊記錄的最大等級,像KG和PS這樣的Alpha等級顯示爲最大,儘管等級12會「更高」。有沒有辦法將非數字成績設置爲00,這樣他們就不會顯示爲最大(除非學生只註冊了非數字成績)。我嘗試了以下內容,甚至無法編譯它。編譯器不喜歡「何時不在」。感謝您提前尋找任何可行的解決方案。如果一個學生從KG到09年註冊過去10年......我想看到09爲最高年級水平。在Max語句之前/期間更改字段的值

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

您的查詢有幾個問題。首先,你應該使用顯式的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()聚合函數內。這應該解決你的語法問題。

+1

優秀...我用你的答案,它現在按預期工作!謝謝 ! –