group by子句的count(*)为零时显示0

时间:2019-04-09 23:14:16

标签: sql count

我正在尝试编写一个SQL查询,如果没有针对指定条件的行,该查询可以将值显示为0

到目前为止,我已经尝试了以下方法,但似乎无济于事

  1. coalesce(count(m.a),'0')
  2. isnull(count(m.a),'0')
  3. case when count(*) > 0 then count(*) else '0' end
select  M.a, m.b, m.c, m.d, m.e,
 --coalesce(count(m.a),'0') as CountOfRecords
 --isnull(count(m.a),'0') as CountOfRecords
 --case when count(*) > 0 then count(*) else '0' end
 from my_table M
 left join

 (select a, b,c,d,e 
  from my_table
 group by a, b,c,d,e 
 having count(*) >1 ) B
 on M.b = B.b 
 and M.c = B.c
 and M.d = B.d
 and M.e = B.e
 and m.a <> B.a

 where M.a in (1,2)
 and M.date<= '1/1/2019'
 group by M.a, m.b, m.c, m.d, m.e

预期结果

A  B  C  D E  count
1  1  1  1 1   10
2  2  2  2 2   0

实际结果

A  B  C  D E  count
1  1  1  1 1   10

2 个答案:

答案 0 :(得分:0)

您需要使用嵌套请求:

public IList<xxAnswer> answers { get; set; }

答案 1 :(得分:0)

您是否正在寻找类似的东西?

select a, b, c, d, e,
       sum(case when M.date <= '2019-01-01' then 1 else 0 end) as cnt
from my_table
where a in (1, 2)
group by a, b, c, d, e;

这将使原始数据中的所有行都与a上的条件匹配,但不一定与日期上的条件匹配。然后,它仅计算与日期匹配的行。