MySQL - 'seeing' 其他行

标签 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

基本上增值税列是数量 * 金额 * 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/

相关文章:

Mysql:没有主键的分区

mysql - 如何在 WHERE 子句中编写带有 IF 的查询?

php - MySQL行数统计

php - 如何使 PHP if 语句依赖于 SQL 查询结果

php - 从 ORDER BY 查询的结果中选择数据

mysql复制跳过语句。可能吗?

mysql - 构建多对多关系的连接表

python - sqlalchemy + MySQL 连接超时

mysql - 插入 SQL 数据库或更新特定值(如果已存在)

php - 从 json api 到 mysql