我有下面的代码,我用它来显示来自'MP'
的wh_id的字段select o.wh_id, o.bill_to_code, d.create_date,
(case when d.pick_area like 'GPS%' then 'GPS' else d.pick_area
end) as pick_area,
count(*) as OUC
from t_order o INNER JOIN
t_pick_detail d
on o.order_number = d.order_number
where o.wh_id = 'MP'
group by o.wh_id, o.bill_to_code, d.create_date,
(case when d.pick_area like 'GPS%' then 'GPS' else d.pick_area
end)
order by o.bill_to_code
它给了我以下结果:
然后,我添加了一个与上表中的项目匹配的额外条件。
额外标准是:
AND d.create_date = '19-FEB-15'
完整代码现在:
select o.wh_id, o.bill_to_code, d.create_date,
(case when d.pick_area like 'GPS%' then 'GPS' else d.pick_area
end) as pick_area,
count(*) as OUC
from t_order o INNER JOIN
t_pick_detail d
on o.order_number = d.order_number
where o.wh_id = 'MP' AND d.create_date = '19-FEB-15'
group by o.wh_id, o.bill_to_code, d.create_date,
(case when d.pick_area like 'GPS%' then 'GPS' else d.pick_area
end)
order by o.bill_to_code
现在我得到的所有结果都显示在下面,但是它看起来似乎没有结果,因为从上面的打印屏幕可以看到该信息。我没有收到任何错误。
希望有人能提供帮助,谢谢。
答案 0 :(得分:1)
从性能的角度来看,我不建议使用 TRUNC ,因为不会在DATE列上使用任何常规索引
最好使用 RANGE 条件。它将使用日期列上的索引,您将看到索引范围扫描,而不是 FULL TABLE扫描。
例如,
d.create_date >= to_date('19-FEB-15', 'DD-MON-YY')
AND
d.create_date < to_date('19-FEB-15 ', 'DD-MON-YY') + 1
或者,
d.create_date
BETWEEN to_date('19-FEB-15', 'DD-MON-YY')
AND to_date('19-FEB-15 ', 'DD-MON-YY') + 1
如果您真的想使用TRUNC
,则必须创建基于功能的索引。
答案 1 :(得分:0)
绝对create_date列也存储时间戳。你曾经尝试过trunc(d.create_date)= TO_DATE('19-FEB-15','DD-MON-YY')。
这工作Sam感谢你:)