用如下代码查询表中数据
select defectClass, count(*)
from qua_particle_iis_his
where defectClass in (1, 2, 3, 4, 5, 6)
and virtualCode = '122009200013'
Group by defectClass
显示结果如下:
其中2和4 因为没有记录。 但是我需要显示出来。
想要的显示出的结果是
select defectClass, sum(case when defectClass in (1, 2, 3, 4, 5, 6) and virtualCode = '122009200013' then 1 else 0 end) as cnt
from qua_particle_iis_his
Group by defectClass
说下数据库类型及版本,这个最好是用递归或者表函数来构造一个虚拟表,但有的数据库不支持。
另外,如果不用递归,那就得手动虚拟一个表,包含有全部的值,再外关联你这个数据,比如
SELECT
t.defectClass,
ifnull( s.ct, 0 ) ct
FROM
( SELECT 1 defectClass UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 ) t
LEFT JOIN (
SELECT
defectClass,
count( * ) ct
FROM
qua_particle_iis_his
WHERE
defectClass IN ( 1, 2, 3, 4, 5, 6 )
AND virtualCode = '122009200013'
GROUP BY
defectClass
) s ON t.defectClass = s.defectClass
select * from (
select defectClass, count(*) as ct
from qua_particle_iis_his
where defectClass in (1, 2, 3, 4, 5, 6)
and virtualCode = '122009200013'
Group by defectClass
) t where t.ct>0
外层加一个嵌套条件
defectClass 这个字段的值,如果是其他表的字段的数据,那left join是可以做到(分清谁连谁,left join才起作用),没有就自己业务代码自己去补数据