2012-05-08 55 views
2

我有一个订单表。每个订单都有一个delivery_date和一个collection_date2个日期列的SQL订单

我想检索订单作为一周的时间表,显示接下来要做的事情。

所以我想我要显示的时间顺序,以便星期三的收集出现在星期二的送货和星期四的另一送货之间。

有关如何使用SQL做到这一点的任何想法?

+0

您正在使用哪种datbase线的东西? MySQL,Oracle? MSSQL? SQLite的?他们以不同的方式处理日期数据并使用不同命名的函数。任何答案都可能取决于特定的供应商。 – FrustratedWithFormsDesigner

回答

7

使用Union ALL,我将每个订单记录看作两条记录:一个用于交付,另一个用于集合。如果您有其他日期(修复?),您可以将另一个子查询与类似的字段组合在一起。

由于您没有在您的订单表中提供任何规格,我弥补了很多。

select * 
from (
    Select OrderID 
     , 'Colection' as VisitType 
     , Collection_Date as VisitDate 
    from Orders 
    Union All 
    Select OrderID 
    , 'Delivery' as VisitType 
    , Delivery_Date as VisitDate 
    from Orders 
) as v 
order by v.VisitDate 
+0

也谢谢你的回复。我会尝试这两种方法,看看最适合哪种。可能是这一个,因为它将两个日期合并在一个名字中。所以我想我需要检查我的代码,所以相同的顺序不会显示两次? – Spunog

+0

IVe从中学到了很多,谢谢很多现在有完美的行为:) – Spunog

2

根据您正在使用的数据库,它会沿着

ORDER BY CASE WHEN delivery_date > collection_date 
     THEN collection_date ELSE delivery_date END 
+0

很酷。这是否与Mysql一起工作? – Spunog

+0

感谢您的帮助。是否可以将日期标记为'DT_THE_DATE'之类的其他名称,而不论其收集日期还是交货日期? – Spunog

+0

@ user1383132:MySql有一个case语句(http://dev.mysql.com/doc/refman/5.0/en/case-statement.html) - 我相信你可以翻译它。 – pdr