小黑爬虫 2021-12-28 16:06 采纳率: 100%
浏览 438
已结题

sql语句中如何将查询没有的记录也显示在查询结果中,显示为0

用如下代码查询表中数据
select defectClass, count(*)
from qua_particle_iis_his
where defectClass in (1, 2, 3, 4, 5, 6)
and virtualCode = '122009200013'
Group by defectClass

显示结果如下:

img

其中2和4 因为没有记录。 但是我需要显示出来。

想要的显示出的结果是

img

  • 写回答

4条回答 默认 最新

  • bekote 2021-12-28 16:21
    关注
    
    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
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • DarkAthena ORACLE应用及数据库设计方案咨询师 2021-12-28 16:23
    关注

    说下数据库类型及版本,这个最好是用递归或者表函数来构造一个虚拟表,但有的数据库不支持。
    另外,如果不用递归,那就得手动虚拟一个表,包含有全部的值,再外关联你这个数据,比如

    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
    
    评论
  • 神仙别闹 2021-12-28 16:14
    关注
    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
    

    外层加一个嵌套条件

    评论
  • a1767028198 2021-12-28 16:15
    关注

    defectClass 这个字段的值,如果是其他表的字段的数据,那left join是可以做到(分清谁连谁,left join才起作用),没有就自己业务代码自己去补数据

    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 1月6日
  • 已采纳回答 12月29日
  • 创建了问题 12月28日

悬赏问题

  • ¥15 爬虫爬取安居客新房信息
  • ¥15 php5.3内存泄露
  • ¥15 DigSilent如何复制复合模型到自己案例?
  • ¥15 求日版华为b610s-77a 官方公版固件,有偿
  • ¥15 关于#java#的问题,请各位专家解答!(相关搜索:java程序)
  • ¥15 linux tsi721的驱动编译后 insmod 提示 报错
  • ¥20 multisim测数据
  • ¥15 求无向连通网的所有不同构的最小生成树
  • ¥15 模拟器的framebuffer问题
  • ¥15 opencv检测轮廓问题