1

基本的に、学生がテストを受けることができるテーブル構造があります。

構造は次のようになります。

http://www.dropmocks.com/mBj9YX

SELECT s.name AS studentName, 
t.name AS testName,
MAX(sc.percentile) 
AS percentile,
    (CASE WHEN  MAX(sc.percentile) > 70 THEN 'passed' 
     WHEN MAX(sc.percentile) <70 THEN 'fail'
     WHEN  MAX(sc.percentile) IS NULL THEN 'not taken' END) AS status
FROM Score sc

したくない部分はここにあります:

WHEN  MAX(sc.percentile) IS NULL THEN 'not taken' END

学生がテストを受けない場合、テスト ID はスコア テーブルに表示されません。テストを受けていない場合にステータス列に「受けていません」を追加するクエリがわかりません。ヘルプ?最初の 2 つは機能しますが、テスト テーブルにテスト ID があり、学生がそのテストを受けていない場合、その学生のテスト ID はスコア テーブルに表示されません。私はそれを検出する方法を見つけようとしています。

4

3 に答える 3

0

CASE var WHENNULLTHEN…は成功しません。

これを使って:

MAX(sc.percentile)がNULLの場合'実行されない'ELSE '123' END

またはこれだけ:

COALESCE(MAX(sc.percentile)、'取得されません')

于 2012-07-24T18:07:22.580 に答える
0

IS NULL の代わりに IS_MEMBER NULL を使用している可能性がありますか? IS_MEMBER 関数は、達成しようとしていることとは何の関係もありません (誰かが役割グループに属しているかどうかを確認してください)。これは、スペースを押してクエリ mssms を入力すると IS_MEMBER が追加されたために発生することがあります。それは過去に私に起こりました。変更してみる

WHEN  MAX(sc.percentile) IS_MEMBER NULL THEN 'not taken'

WHEN  MAX(sc.percentile) IS NULL THEN 'not taken'
于 2012-07-24T17:59:05.637 に答える
0

私はテストする必要はありませんでしたが、試してみました

SELECT
    sc.name AS studentName, 
    t.name AS testName,
    MAX(sc.percentile) AS percentile,
    (CASE
        WHEN MAX(sc.percentile) > 70 THEN 'passed'
        WHEN MAX(sc.percentile) < 70 THEN 'fail'
        WHEN sc.testID IS NULL THEN 'not taken'
        -- /*OR...*/ WHEN MAX(sc.percentile) IS NULL THEN 'not taken'
    END) AS status
FROM Score sc
FULL OUTER JOIN Test t ON t.testID = sc.testID
于 2012-07-24T17:59:42.053 に答える