MySQL - “看到”其他行

时间:2009-07-14 10:46:22

标签: mysql

我有一个查询,它会生成一个这样的订单列表:

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'”,因为它不是我表中的实际字段,而是结果中的字段。

1 个答案:

答案 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