0

変数 @SubjectName が「英語」、「数学」、および科学などの他の科目の間で変更されたときに、以下のケースステートメントで結果セットを変更したいと思います。

変数が「英語」の場合、Ks2en という学生の列が結果セットに含まれる必要がありますが、「数学」が選択されている場合、列は Ks2ma に変更され、それ以外の場合は Ks2av が選択されます。

結果セットに空白値 ('') がある場合は、'No KS2' に置き換えられます。

これが私がこれまでに持っていたもので、うまくいきません:

@SubjectName varchar(100) ='English'

SELECT CASE WHEN (student.Ks2en = '' and @SubjectName = 'English') OR 
    (student.Ks2ma = '' and @SubjectName = 'Mathematics') OR 
    (student.Ks2ma = '' AND @SubjectName <> 'Mathematics' AND
    @SubjectName <> 'English') 
            THEN 'No KS2' ELSE student.ks2en 
                OR student.Ks2ma OR student.Ks2av END AS 'KS2'
  FROM student JOIN subject 
    ON subject.upn=student.upn 
  WHERE
    [subject.Name] = @SubjectName

以下は学生テーブルの例です。

Ks2en    Ks2ma    Ks2av
4b       3c       3a
4a       4a       4a
3c                3c
         2c       2c
4c       3a       4c
4b       4b       4b

5a       3a       4a

@SubjectName = 'English' の場合、結果セットは次のようになります。

Ks2    
4b       
4a       
3c
No KS2     
4c       
4b
No KS2        
5a           

@SubjectName = 'Mathematics' の場合、結果セットは次のようになります。

KS2
3c
4a
No KS2
2c
3a
4b
No KS2 
3a

@SubjectName = 'Science' の場合、結果セットは次のようになります。

KS2
3a
4a
3c
2c
4c
4b
No KS2
4a
4

1 に答える 1

1

このコードは、件名に応じて 3 つの列のいずれかを動的に返します。

それはあなたが望むものですか?必要に応じて、ステートメントの最後に where 句を追加できます。

ジョン

-- dynamically create column
SELECT 
   CASE 
      WHEN lower(coalesce(SubjectName, 'unknown')) = 'english' THEN
        [Ks2en]
      WHEN lower(coalesce(SubjectName, 'unknown')) = 'mathematics' THEN
        [Ks2ma]
      ELSE
        [Ks2av]
   END as KS2
FROM [student] INNER JOIN [subject] ON subject.upn=student.upn 
WHERE [subject].Subjectname LIKE @SubjectName;

テーブルスキーマは次のようになっていると想定しています。タプル表記を使用しています。

student (upn, student name, ...)
subject (upn, subject name, ks2en, ks2ma, ks2av, ...)

そうでない場合、コードは機能しません。

于 2013-09-30T15:52:46.667 に答える