在mysql中使用COALESCE来获取运费

时间:2016-01-21 06:08:48

标签: mysql coalesce

需要创建一个sql视图来计算佣金&运输费用。每件商品的运费,但是他们会在订单ID级别收费,可以有多个订单商品请查看附件中的图片。请注意,运费是订单ID级别。而不是订单商品ID级别。对于运费收入行,订单商品ID列为空白。因此,为了获得运费,我们需要将订单中的商品除以

订单商品ID不是该订单中的商品,每个订单ID可以包含一个或多个订单商品ID image of view required

Sql fiddle schema

SELECT main.order_id, main.order_item_id, COALESCE(P.a,0) + COALESCE(C.a,0) - (COALESCE(S.a,0) / main.c) AS price
FROM 
     (((SELECT order_id, order_item_id, count(*) as c FROM main GROUP BY order_id, order_item_id) main LEFT OUTER JOIN
     (SELECT amount AS a FROM main WHERE description='Principal') P ON main.order_id =P.order_id AND main.order_item_id = P.order_item_id)  LEFT OUTER JOIN
     (SELECT amount AS a FROM main WHERE description='Commission') C ON main.order_id=C.order_id AND main.order_item_id = C.order_item_id)  LEFT OUTER JOIN 
     (SELECT amount AS a FROM main WHERE description='Shipping Charges') S ON main.order_id=S.order_id AND main.order_item_id = S.order_item_id

上面是sql查询,它给出了一个错误#1054 - 'on clause'中的未知列'P.order_id'可以帮助我纠正得到所需的结果,如附图所示。

1 个答案:

答案 0 :(得分:0)

试试这个

    SELECT main.order_id, main.order_item_id, COALESCE(P.a,0) + COALESCE(C.a,0) - (COALESCE(S.a,0) / main.c) AS price
FROM 
     (((SELECT order_id, order_item_id, count(*) as c FROM main GROUP BY order_id, order_item_id) main LEFT OUTER JOIN
     (SELECT main.order_id,main.order_item_id,amount AS a FROM main WHERE description='Principal') P ON main.order_id =P.order_id AND main.order_item_id = P.order_item_id)  LEFT OUTER JOIN
     (SELECT main.order_id,main.order_item_id,amount AS a FROM main WHERE description='Commission') C ON main.order_id=C.order_id AND main.order_item_id = C.order_item_id)  LEFT OUTER JOIN 
     (SELECT main.order_id,main.order_item_id,amount AS a FROM main WHERE description='Shipping Charges') S ON main.order_id=S.order_id AND main.order_item_id = S.order_item_id