我有一个带有“订单”和“发货”时间戳的ID表。大多数ID将同时具有“订单”和“装运”行,但某些ID仅具有装运。我想实现一个If-Then逻辑,如果我在其中看到订单行,然后检索时间戳。如果一个ID不包含“订单”行,那么我将求助于“发货”时间戳。
我试图解决此问题的一种方法是创建一个case语句,以创建一个新的“ Orders”列,并为每个Orders和Shipment Row填充特定的时间戳。我将创建一个子查询,如果Orders列不为null,则使用该时间戳记。或者,如果“订单”列为空,则使用发货时间戳记。
我不能仅按行=“订单”进行过滤,因为它将消除仅包含货件的ID
原始表:
id Type Date
1 orders 3/28
1 shipment 3/23
预期结果:
id Type Date Orders_Column
1 orders 3/28 3/28
1 shipment 3/23 3/28
答案 0 :(得分:2)
您可以使用表的LEFT JOIN
来完成此操作,为orders
寻找匹配的id
行。如果没有匹配的行,则使用shipment
日期:
SELECT o1.*, COALESCE(o2.Date, o1.Date) AS `Date`
FROM orders o1
LEFT JOIN orders o2 ON o2.id = o1.id AND o2.Type = 'orders'
输出(对于仅具有额外货件编号的演示):
id Type Date Date
1 orders 3/28 3/28
1 shipment 3/23 3/28
2 shipment 3/25 3/25