SQL子查询COUNT(var)将0变为NULL

时间:2017-05-23 16:36:39

标签: sql sql-server null subquery

我编写了一个带有子查询的SQL查询来包含计数。当计数为0时,我尝试过滤掉0,它将0变为NULL并保留行,反之亦然。结果是我无法过滤出0,这是包含计数的目的。

 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次计数?

3 个答案:

答案 0 :(得分:0)

您不会在SELECT子句中进行过滤。如果您不希望seq_stud中的行不匹配,请使用WHERE

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

答案 1 :(得分: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

答案 2 :(得分:0)

我只想出了这个。 Select子查询应作为WHERE语句包含在

Using having count() in exists clause