2016-01-21 40 views
0

需要创建一个sql视图来计算佣金&运费。每件商品的运费,但是它们是按订单ID级别收取的,可以有多个订单商品请查看附件中的图片。请注意,因为运费在订单ID级别。而不是订单商品ID级别。订单商品ID列为空白,以便收取运费。因此,为了获得运费,我们需要按订单中的没有商品进行划分。在mysql中使用COALESCE来获取运输费用

订单商品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 - 在未知列'P.order_id“的条款”谁能帮我纠正以获得所需的结果,如附图所示。

+0

在你的子查询为P,所以它说未知列 –

+0

感谢Ahammed你没有选择的order_id作为列。由于这是由另一个人写的,我几乎没有什么知识可以帮助我纠正代码 – Kanted

回答

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 
+0

确实尝试过,运费是55,订单有2个项目,因此需要按顺序除以项目数量(2),并扣除在每个订单商品ID上,因此我们知道每个订单商品ID收到的最终结果是什么,因此结果价格为184-27.5和414-27.5 – Kanted