如果结果没有任何结果,如何返回查询结果

时间:2013-12-08 04:35:12

标签: sql oracle count null

我有一个名为“orders”的表,其中包含以下数据:

   Date     Order_No     Ship_Method
-------------------------------------
12/6/2013   1234567       RTS
12/6/2013   7654321       
12/7/2013   3456789       RTS
12/7/2013   9876543       
12/7/2013   1123456       RTS
12/7/2013   5523847       RTS
12/8/2013   8876549    
12/8/2013   7733654

我需要一个查询,在Ship_Method字段中搜索有多少行数据“RTS”,并在运行查询的那天返回以下结果(如下所示):

   Date     RTS_Shipments
-------------------------
12/8/2013         0

-Anthony C。

修改

关于上述问题对我有用的查询如下(由Carth在答案部分提供):

select 
sub.tdate,
count(orders.dt)
from (select to_date(to_char((sysdate-1),'mmddYYYY'),'mmddYYYY') tdate from dual) sub
left join orders on sub.tdate = orders.dt and orders.ship_method like '%RTS%'
group by sub.tdate

2 个答案:

答案 0 :(得分:2)

为了获得您需要的结果,您需要为您的选择创建一个基础,在该选择中您最终将过滤的术语存在,然后使用它来加入目标表。在我最初的回答中,我认为你可以直接从双重中选择一个变量值,但由于我无法得到正确解决的语法,所以还有其他一些想法。您可以创建一个新的“工作”表,其中包含您要检查的所有日期,然后选择该表并将其保留在目标表中,或者您可以创建一个子选择以保留您的预期值并将其用作您的基础声明如下:

select 
  sub.tdate,
  count(orders.dt)
from (select to_date(to_char((sysdate-1),'mmddYYYY'),'mmddYYYY') tdate from dual) sub
left join orders on sub.tdate = orders.dt and orders.ship_method like '%RTS%'
group by sub.tdate

答案 1 :(得分:1)

您可以在同一个表格中使用左连接来获取所需的所有结果和结果。你需要的那个是1和0,而你没有。

应该这样做。

 SELECT to_char(o1.DT, 'MM/DD/YYYY') As "Date", 
        SUM(case when o1.Ship_Method is null then 0 else 1 end) As RTS_Shipments
  FROM orders o1 
     left join orders o2 
        on (o1.dt = o2.dt and o2.Ship_Method like '%RTS%')
 WHERE trunc(o1.DT) = trunc(SYSDATE) 
 GROUP BY to_char(o1.DT, 'MM/DD/YYYY')

在小提琴上看到它:http://sqlfiddle.com/#!4/fd374/6

我已将日期字段更改为dt,因为日期是保留字。

还有。此查询可以计算每个日期,但它只显示您过滤当天的注册表:trunc(o1.DT) = trunc(SYSDATE)如果您取消此条件,您将看到每个日期都有正确的计数。