如何将来自多行的结果聚合成单行mysql

时间:2015-01-04 19:14:51

标签: mysql sql

我有一个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

OrderProducts表:

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'

1 个答案:

答案 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;