2017-05-25 9 views
1

複数の学生登録レコードの最大グレードを見つけるには、グレード12が「より高い」場合でもKGとPSのようなアルファグレードがmaxとして表示されます。非数値の等級を00に設定する方法はありますか?最大では表示されません(学生が非数値の学年にのみ登録されている場合を除きます)。私は以下を試してコンパイルすることさえできません。コンパイラは、 "いつではない"のが好きではありません。過去10年間、KGから09年に登録した学生の場合は、最大グレードレベルとして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]; 

あなたは私はあなたがテーブルを結合していることを明示するINNER JOINWHERE SD.[Student_ID] = SE.[Student_ID]を移動していることに気づくでしょう。 CASE式の構文はCASE WHEN <some condition> THEN <something> ELSE <something else> ENDで、MAX()集合関数の内部に配置されます。これはあなたが持っていた構文の問題を修正するはずです。

+1

優れています...私はあなたの答えを使用して、今は期待どおりに動作しています!ありがとうございました ! –

関連する問題