我有一个名为“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
答案 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)
如果您取消此条件,您将看到每个日期都有正确的计数。