我编写了一个带有子查询的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次计数?
答案 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语句包含在
中