我有一个Orders表,OrderId为PK。我还有一个Order_Produ表,其中OrderId为FK。每个Order_Product行都包含Product_Name,Product_Status,Product_Delivery_Date等列。这些表在OrderId上以一对多关系连接。
我正在尝试设计一个查询,它将合并两个表,以便为每个OrderId获取一行,但查询必须具有Description列,该列将连接所有Order_Product行的Oder_Name值;我还需要使用一些逻辑计算聚合Product_Status(如果其中一个产品是'NotCompleted',那么聚合Product_Status将是'NotCompleted'。最后我想让OrderDeliveryDate计算得到它将是MIN所有Order_Product Product_Delivery_Date值的值。
我正在使用MySql。你能否就如何实现这三项任务给我一些建议?
示例:
OrderId客户名称
1001 CustomerX
Id OrderId ProductDescription ProductDeliveryDate ProductStatus
20 1001 ProductA 2015-01-30 NotCompleted
21 1001 ProductB 2015-01-15已完成
24 1001 ProductC 2015-02-13 NotCompleted
OrderId客户名称描述OrderDeliveryDate OrderStatus
'1001''CustomerX''ProductA,ProductB,ProductC''2015-01-15''NotCompleted'
答案 0 :(得分:1)
根据您的描述,以下查询可能会执行您想要的操作:
select o.*, op.status, op.orderdeliverydate, op.description
from orders o join
(select OrderId, group_concat(op.order_name) as description,
(case when sum(Product_Status = 'Not Completed') > 0 then 'Not Completed'
else 'Completed'
end) as Status,
min(Product_Delivery_date) as OrderDeliveryDate
from Order_Product
group by OrderId
) op
on o.OrderId = p.OrderId;