我有一个生成如下订单列表的查询:
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
基本上增值税列是数量 * 金额 * 0.15,如果增值税代码是“S”(我使用 IF 语句执行此操作),否则为 0。
除了该发票编号有一个折扣行(在本例中,发票 3761 有一个折扣行)之外,这适用于订单。当有折扣行时,我需要以不同的方式计算增值税 (((Qty * (Amount - 10%)) * 0.15)。
这甚至可以在 MySQL 中“查看”是否有普通发票编号的折扣行并相应地更改其他行的增值税字段?如果是这样,我应该使用什么函数,我可以将它与 IF 语句结合起来生成两个增值税计算公式吗?
补充一下我的问题——折扣金额并不总是 10%。它存储在描述字符串中(通常是“折扣 (5%)”或“在线折扣 (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’”,因为它不是我表中的实际字段,而是结果中的字段。
最佳答案
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
关于MySQL - 'seeing' 其他行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1124635/