1

私はこのクエリを持っています:

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)行を使用して紫色の線のようにグループ化し、(status_code)行を参照するすべての(itempurchase_quantity)を追加してから、この式(status_15 --status_16)を画像のように適用します。

この結果が欲しい、GROUP():

purchase_code  item_code  status_code  itempurchase_quantity  item_costprice
1              1506       15           713                    126.94
2              1503       16           12                     0.00
2              1683       15           9                      25.28
2              1931       15           60                     0.00

item_code(1997)が存在しない場合status_code = 15したがって、負の数(-9)が返されるため、表示する必要はありません。

2              2325       16           50                     849.97

注: 16個のstatus_codeをすべて非表示にする必要があります

Demo data to play with query at sqlfiddle

更新: これは私が必要とするものを詳述する写真です: ここに画像の説明を入力してください

4

2 に答える 2

2
SELECT 
      a.purchase_code,
      b.item_code, 
      '15' AS status_code,
      SUM(
        CASE b.status_code 
            WHEN 15 THEN b.itempurchase_quantity
        ELSE 
            - (b.itempurchase_quantity) 
        END) 
        AS itempurchase_quantity,
      b.item_costprice
FROM qa_items_purchases b
    INNER JOIN qa_suppliers_invoices a 
        ON a.supplier_invoice_code = b.item_invoicecodesupplier
GROUP BY purchase_code, b.item_code, b.item_costprice
    HAVING itempurchase_quantity > 0
    ORDER BY purchase_code 
    LIMIT 0,20000
于 2012-07-21T07:46:04.173 に答える
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;

デモ

ノート

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, item_code;

新しいデモ

于 2012-07-21T07:54:31.733 に答える