我陷入了SQL查询中。原因是因为我添加了带有Left JOIN的表:
这是我的查询,问题出在Amount_tax_excl
SELECT [...]
os.amount + os.shipping_cost_amount AS `amount`,
(CASE
WHEN od.id_customization!=0 AND s.id_shop=3 THEN SUM(CAST(os.amount / 1.19 AS decimal(10,6)))
WHEN od.id_customization!=0 AND s.id_shop=6 THEN SUM(osd.amount_tax_excl)
WHEN od.id_customization!=0 AND s.id_shop!=3 THEN SUM(CAST(os.amount / 1.2 AS decimal(10,6)))
ELSE SUM(osd.amount_tax_excl)
END) AS amount_tax_excl,
SUM(osd.amount_tax_incl) AS amount_tax_incl,
os.shipping_cost_amount, os.partial,
[...]
FROM ps5_order_slip os
LEFT JOIN ps5_orders o ON (os.id_order = o.id_order)
LEFT JOIN ps5_order_detail od ON (o.id_order = od.id_order AND os.id_order = od.id_order)
LEFT JOIN ps5_shop s ON (o.id_shop = s.id_shop)
LEFT JOIN ps5_address a ON (o.id_address_delivery = a.id_address)
LEFT JOIN ps5_state e ON (a.id_state = e.id_state)
LEFT JOIN ps5_order_slip_detail osd ON (os.id_order_slip = osd.id_order_slip)
WHERE os.date_add >= '2019-07-01' AND os.date_add <= '2019-07-30 23:59:59'
GROUP BY os.id_order_slip
通常,结果应为645.35,如金额
我注意到这是因为order_detail表的原因,因为有6种产品。
所以645.35 * 6 = 3872.100000。 我使用DISTINCT,如果是ELSEIF,则没有任何效果 我确实需要此查询的变量od.id_customization,它就是该表中的变量。
(抱歉,我不知道如何直接在堆栈上显示图像)
感谢帮助
答案 0 :(得分:0)
您仅使用标题ID联接到order_detail表。您需要使用线路级别ID来加入。
答案 1 :(得分:0)
我找到了一种方法,但我认为它很脏。
SELECT [...],
os.amount + os.shipping_cost_amount AS `amount`,
(CASE
WHEN od.id_customization!=0 AND s.id_shop=3 THEN SUM(CAST(os.amount / 1.19 AS decimal(10,6))) / (Select COUNT(id_order) FROM ps5_order_detail WHERE id_order = os.id_order)
WHEN od.id_customization!=0 AND s.id_shop=6 THEN SUM(osd.amount_tax_excl) / (Select COUNT(id_order) FROM ps5_order_detail WHERE id_order = os.id_order)
WHEN od.id_customization!=0 AND s.id_shop!=3 THEN SUM(CAST(os.amount / 1.2 AS decimal(10,6))) / (Select COUNT(id_order) FROM ps5_order_detail WHERE id_order = os.id_order)
ELSE SUM(osd.amount_tax_excl) / (Select COUNT(id_order) FROM ps5_order_detail WHERE id_order = os.id_order)
END) AS amount_tax_excl,
SUM(osd.amount_tax_incl) / (Select COUNT(id_order) FROM ps5_order_detail WHERE id_order = os.id_order) AS amount_tax_incl,
os.shipping_cost_amount, os.partial,
os.date_add, os.date_upd, e.`iso_code` AS `ISO Etat livraison`, e.`name` AS `Name Etat livraison`, a.city, o.`payment` AS `payment`
FROM ps5_order_slip os
LEFT JOIN ps5_orders o ON (os.id_order = o.id_order)
LEFT JOIN ps5_order_detail od ON (os.id_order = od.id_order)
[...]