MySQL查询减法值

MySQL查询减法值,mysql,sql,database,Mysql,Sql,Database,我有一个疑问: SELECT ( SELECT purchase_code FROM qa_suppliers_invoices a WHERE a.supplier_invoice_code = b.item_invoicecodesupplier ) AS purchase_code, item_code, status_code, itempurchase_quantity,

我有一个疑问:

SELECT (
        SELECT purchase_code 
        FROM qa_suppliers_invoices a 
        WHERE a.supplier_invoice_code = b.item_invoicecodesupplier
       ) AS purchase_code, 
      item_code, 
      status_code, 
      itempurchase_quantity, 
      item_costprice 
FROM qa_items_purchases b
ORDER BY purchase_code LIMIT 0,20000;
它返回以下数据

我想使用(item_code)行像紫色线一样进行分组,我想添加所有(itempurchase_quantity)参考(status_code)行,然后应用此执行(status_15-status_16)也像图像一样

我想要这个结果,GROUP():

如果项目_代码(1997)不存在状态_代码=15,则返回负数(-9),则无需显示

2              2325       16           50                     849.97
注意: 我需要消除所有16个状态码

更新: 这是一张详细说明我需要的图片:

使用这个

SELECT purchase_code, item_code, status_code, 
     SUM(case status_code 
         when 15 then itempurchase_quantity
         ELSE (-1*itempurchase_quantity) END
        ) AS itempurchase_quantity
FROM myTable
GROUP BY purchase_code;
注意

您需要使用数据,而不是myTable。我已经用您在图中显示的数据创建了
myTable

我想新的问题是

SELECT (
    SELECT purchase_code 
    FROM qa_suppliers_invoices a 
    WHERE a.supplier_invoice_code = b.item_invoicecodesupplier
   ) AS purchase_code, 
  item_code, 
  status_code, 
  SUM(case status_code 
         when 15 then itempurchase_quantity
         ELSE (-1*itempurchase_quantity) END
        ) AS itempurchase_quantity, 
  item_costprice 
FROM qa_items_purchases b
GROUP BY purchase_code
ORDER BY purchase_code 
LIMIT 0,20000;

更新1 用这个

SELECT purchase_code, item_code, status_code, 
     SUM(case status_code 
         when 15 then itempurchase_quantity
         ELSE (-1*itempurchase_quantity) END
        ) AS itempurchase_quantity
FROM myTable
GROUP BY purchase_code;
注意

您需要使用数据,而不是myTable。我已经用您在图中显示的数据创建了
myTable

我想新的问题是

SELECT (
    SELECT purchase_code 
    FROM qa_suppliers_invoices a 
    WHERE a.supplier_invoice_code = b.item_invoicecodesupplier
   ) AS purchase_code, 
  item_code, 
  status_code, 
  SUM(case status_code 
         when 15 then itempurchase_quantity
         ELSE (-1*itempurchase_quantity) END
        ) AS itempurchase_quantity, 
  item_costprice 
FROM qa_items_purchases b
GROUP BY purchase_code
ORDER BY purchase_code 
LIMIT 0,20000;

更新1

到目前为止你都试了些什么?给我们看一些代码…只是我试着使用,分组方式(项目代码),但我不知道如何在参考状态代码行时进行加减。一个问题,你的状态代码是15和16吗?好的,让我试试。试试@Elviejo answer,让我知道这是否有效…@JohnNuñez当我对一个项目有多个状态代码时,我如何确定结果的状态代码?你迄今为止都尝试了什么?给我们看一些代码…只是我试着使用,分组方式(项目代码),但我不知道如何在参考状态代码行时进行加减。一个问题,你的状态代码是15和16吗?好的,让我试试。试试@Elviejo answer,让我知道这是否有效…@JohnNuñez当我对一个项目有多个状态代码时,我如何确定结果的状态代码?它是伪代码,而不是神奇的复制粘贴和工作。。让我检查一下anyway@JohnNuñez现在检查一下。我得到的查询中缺少“Then”(状态代码)是一个不明确的错误,我正在尝试更改一些参数。可能是因为您需要设置每个列从哪个表开始。我没有这些信息,请使用别名并完成that@JohnNu尼兹,你确认我的答案了吗?如果将别名(“a”和“b”)添加到每个列,考虑到它们属于哪个表,这应该是workIt的伪代码,而不是神奇的复制粘贴和工作。。让我检查一下anyway@JohnNuñez现在检查一下。我得到的查询中缺少“Then”(状态代码)是一个不明确的错误,我正在尝试更改一些参数。可能是因为您需要设置每个列从哪个表开始。我没有这些信息,请使用别名并完成that@JohnNu尼兹,你确认我的答案了吗?如果您将别名(“a”和“b”)添加到每个列中,考虑到它们属于哪个表,这应该会起作用。我认为这不会起作用,因为group by子句中没有项目代码和状态代码,您在select中显示了这些字段,而不使用聚合函数我感谢您的帮助,让我来attach@FahimParkar,请记住,我们只需要对重复的代码(项目代码)进行分组,请查看采购代码=2仅起作用,因为项目代码与采购代码相同。。但是,如果他想使用另一个采购代码,使用不同的项目代码(你可以在他发布的img中看到),它将不起作用。这就是为什么我认为按每个字段分组更有效的原因safer@JohnNuñez:你能提供代码2的预期输出吗??请使用代码2的预期输出更新您的问题…我认为这将不起作用,因为group by子句中没有项目代码和状态代码,并且您正在select中显示这些字段,而您没有将它们应用到聚合函数中。我感谢您的帮助,让我来看看attach@FahimParkar,请记住,我们只需要对重复的代码(项目代码)进行分组,请查看采购代码=2仅起作用,因为项目代码与采购代码相同。。但是,如果他想使用另一个采购代码,使用不同的项目代码(你可以在他发布的img中看到),它将不起作用。这就是为什么我认为按每个字段分组更有效的原因safer@JohnNuñez:你能提供代码2的预期输出吗??请使用代码2的预期输出更新您的问题。。。
SELECT purchase_code, item_code, status_code, 
       SUM(case status_code 
           when 15 then itempurchase_quantity
           ELSE (-1*itempurchase_quantity) END
          ) AS itempurchase_quantity
FROM myTable
GROUP BY purchase_code, item_code;