Oracle SELECT COUNT(*)... GROUP BY ...不返回计数为零的行

时间:2010-10-20 03:20:00

标签: sql oracle

我尝试了“mysql SELECT COUNT(*)... GROUP BY ...中没有返回计数为零的行”中给出的解决方案,但它对我不起作用。

这是SQL ::

SELECT empid, SUM (total_records) total_records  
  FROM (SELECT ID,  
               (CASE WHEN ID LIKE '2%'  THEN '2____'  
                     WHEN ID LIKE '3%'  THEN '3____'  
                     WHEN ID LIKE '99%' THEN '99____'  
               END) empid,  
               total_records  
          FROM tr  
         where ( id like '2%' or id like '3%' or id like '99%'))  
GROUP BY empid;  

当empid SUM中的特定值为零时,该行不会显示在输出中。这表明我们没有针对该特定empid的数据(或总和)。但是,可以在结果集中显示该特定值的“0”吗?

3 个答案:

答案 0 :(得分:2)

为ivanpro和Michael Goldshteyn的答案添加详细信息,这是一个带有虚拟“表”的演示,其中三个所需的empid值外部连接到原始查询

SELECT a.empid, nvl(SUM (total_records),0) total_records  
  FROM (select '2____' empid from dual union select '3____' from dual 
                                       union select '99____' from dual) a 
       left outer join
       (SELECT ID,  
               (CASE WHEN ID LIKE '2%'  THEN '2____'  
                     WHEN ID LIKE '3%'  THEN '3____'  
                     WHEN ID LIKE '99%' THEN '99____'  
               END) empid,  
               total_records  
       FROM tr 
       where ( id like '2%' or id like '3%' or id like '99%')) b 
     on a.empid = b.empid
GROUP BY a.empid; 

答案 1 :(得分:0)

不使用此查询,您需要将其结果集与另一个查找缺失值的查询联合起来。

答案 2 :(得分:0)

我认为你正在寻找LEFT JOIN。使用它而不是嵌套的SELECT语句。我没有给你一个例子,但这website可能对你有帮助。