2017-05-23 3 views
0

カウントを含めるためにサブクエリを使用してSQLクエリを作成しました。カウントが0で、0をフィルタリングしようとすると、0がNULLに変換されて行が保持され、その逆もあります。結果は、カウントを含める目的であった0を除外できないということです。COUNT(var)を持つSQLサブクエリは0からNULLになります

SELECT distinct  
     a 
     ,b 
     , 
    (SELECT 
     count(id) 
     FROM seq_stud 
     WHERE scs.SequenceID = seq_stud.SequenceID 
     and seq_stud.EndDate is null 
     HAVING count(id) <> 0 
    ) As t1 
    FROM sp 
    INNER JOIN p on sp.ProgramID = p.ProgramID 
    ...etc. 

なぜこれが起こっているのか、どのように0カウントを除外できるのか誰にも分かりますか?

+0

として含まれるべきあなたは「ID」のカウント数を選択しているが持つ文で「STUDENTID」の数を制限しています。それは意図的なのでしょうか? –

+0

私が正しく理解しているなら、たぶんWHERE t1> 0を最後のWHERE節に入れる必要があります。あなたはHAVINGをまったく必要としないかもしれません。 –

+0

これは間違いだった - 私は両方ともidに変更されました – NadineK

答えて

0

SELECT句でフィルタリングしません。あなたはseq_studで一致していない行をしたくない場合は、WHEREを使用します。

WHERE EXISTS (SELECT 1 
       FROM seq_stud ss 
       WHERE scs.SequenceID = ss.SequenceID and ss.EndDate is null 
      ) 
+0

私はこれを試しましたが、それは私にエラーを与えています。サブクエリ内にWHERE EXISTSを含める方法 – NadineK

0

は、私は完全にHAVINGステートメントを削除します。これをWHERE節に入れる必要があります。それ以外の場合は、見つかったようにnullが返されます。

SELECT distinct a, b, 
    (SELECT count(id) 
    FROM seq_stud 
    WHERE scs.SequenceID = seq_stud.SequenceID 
     and seq_stud.EndDate is null 
    ) As t1 
FROM sp 
INNER JOIN p on sp.ProgramID = p.ProgramID 

WHERE t1 > 0 
+0

これは機能しません。 t1が無効な列名であるというエラーが表示されます。 – NadineK

関連する問題