我有一个查询,它会生成一个这样的订单列表:
Invoice Description Qty Amount VAT VAT code
3761 Flyers -1 -100 0 Z
3761 Business Cards -1 -75 -11.25 S
3761 Business Cards -1 -75 -11.25 S
3761 Discount(10%) -1 25 0 Z
3761 Delivery -1 -27 -4.05 S
如果增值税代码为'S'(我使用IF语句执行此操作),基本上增值税列是数量*金额* 0.15,否则为0.
除了该发票编号的折扣行之外,这适用于订单(在这种情况下,Invoice 3761有折扣行)。如果有折扣行,我需要以不同的方式计算增值税(((数量*(金额 - 10%))* 0.15)。
在MySQL中甚至可以“查看”是否存在常用发票编号的折扣行并相应地更改其他行的增值税字段?如果是这样,我应该使用什么功能,我可以将它与IF语句结合起来产生两个VAT计算公式吗?
要添加我的问题 - 折扣金额并不总是10%。它存储在Description字符串中(通常为“Discount(5%)”或“Online Discount(10%)”)。在我的SELECT中,我使用它将其更改为名为“DiscountPercent”的数值字段:
IF(ol.Type = 'DISCOUNT', REPLACE(REPLACE(REPLACE(ol.Description, '%)', ''), 'Discount (', ''), 'Online ', ''), NULL) AS DiscountPercent,
现在让我们走你的路线:
WHEN 1 THEN Qty * Amount * 0.9 * 0.15
并修改它以扣除百分比而不是像0.9这样的数字:
WHEN 1 THEN (Qty * Amount * (1 - 1 / DiscountPercent)) * 0.15
我需要知道的是如何使用此行正确访问“DiscountPercent”字段。我在“字段列表”中收到错误“未知列'DiscountPercent'”,因为它不是我表中的实际字段,而是结果中的字段。
答案 0 :(得分:1)
SELECT i.*,
Qty * Amount * 0.15 *
COALESCE(
(
SELECT 1 - CAST(SUBSTRING(SUBSTRING_INDEX(description, '%)', 1), POSITION('(' IN description) + 1) AS DECIMAL) * 0.01
FROM invoice ii
WHERE ii.invoice = i.invoice
AND ii.description RLIKE 'discount[^(]*\\([0-9]+\\%\\)'
LIMIT 1
), 1) AS vat
FROM invoice i