2012-01-24 9 views
0
SELECT  receive.RECEIPT_ID, receive.RECEIPT_DATE, supplier.NAME, item.NAME AS Expr2, receive_item.PRICE, receive_item.QTY, (receive_item.QTY - IFNULL(delivery_item.QTY, 0)) AS 'REMAINED QTY.' 
FROM   receive_item INNER JOIN 
         receive ON receive_item.RECEIPT_ID = receive.RECEIPT_ID INNER JOIN 
         supplier ON receive.SUPPLIER_ID = supplier.ID INNER JOIN 
         item ON receive_item.ITEM_ID = item.ID INNER JOIN 
         po ON receive.PO_NUMBER = po.PO_ID LEFT OUTER JOIN 
         delivery_item ON receive_item.ITEM_ID = delivery_item.ITEM_ID AND receive_item.RECEIPT_ID = delivery_item.RECEIVE_ID 

次の表は、私は、テーブルは次のように表示されますID 4および5を組み合わせた選択クエリを必要とするMySQL Select Query - 2つの行を追加して1つに表示しますか?

ID  RECEIPT_DATE SUPP_NAME  ITEM      PRICE QTY QTY_REMAINED 

1 2012-01-22 MANCO COPPER PIPE 42MM      245.00 1 0 
2 2012-01-22 MANCO COPPER PIPE 15MM      350.00 1 0 
3 2012-01-22 MANCO "RUBBER INSULLATION HOSE 35mm x 1""" 478.00 1 0 
4 2012-01-22 MANCO DEFROST HEATER 9mmx215cm 220Vx800W  5000.00 10 1 
5 2012-01-22 MANCO DEFROST HEATER 9mmx215cm 220Vx800W  5000.00 10 9 
6 2012-01-22 MANCO COPPER ELBOW 90 42MM     100.00 1 0 
7 2012-01-22 MANCO COPPER ELBOW 90 12MM     200.00 3 0 
8 2012-01-22 MANCO COPPER ELBOW 45 28MM     3000.00 4 0 
9 2012-01-22 MANCO COPPER PIPE 15MM      4.00 3 2 0 

上記の非常に複雑な選択クエリからです。

ID  RECEIPT_DATE SUPP_NAME  ITEM      PRICE QTY QTY_REMAINED 

1 2012-01-22 MANCO COPPER PIPE 42MM      245.00 1 0 
2 2012-01-22 MANCO COPPER PIPE 15MM      350.00 1 0 
3 2012-01-22 MANCO "RUBBER INSULLATION HOSE 35mm x 1""" 478.00 1 0 
4 2012-01-22 MANCO DEFROST HEATER 9mmx215cm 220Vx800W  5000.00 10 0 
5 2012-01-22 MANCO COPPER ELBOW 90 42MM     100.00 1 0 
6 2012-01-22 MANCO COPPER ELBOW 90 12MM     200.00 3 0 
7 2012-01-22 MANCO COPPER ELBOW 45 28MM     3000.00 4 0 
8 2012-01-22 MANCO COPPER PIPE 15MM      4.00 3 2 0 

ので、目的のテーブルに、ID 4ためQTY_REMAINED0ない1と9

として登場している私は、クエリが値0を作るために10 - (10- 1) + (10 - 9)ような何かをしなければならないと思います。

できますか?私はプログラムでそれをやるべきですか?

+0

どちらのテーブルにもIDが間違っているようですが、再確認できますか? – piotrm

答えて

1

私は、共通のRECEIPT_DATE、SUPP_NAME、ITEMとPRICEの値をグループ化するすべての値を仮定しています。

SELECT 
    receive.RECEIPT_DATE, supplier.NAME, item.NAME AS Expr2, receive_item.PRICE, 
    receive_item.QTY, 
    receive_item.QTY - IFNULL(sum(delivery_item.QTY), 0)) AS 'REMAINED QTY.' 
FROM 
    receive_item 
INNER JOIN 
    receive ON receive_item.RECEIPT_ID = receive.RECEIPT_ID 
INNER JOIN 
    supplier ON receive.SUPPLIER_ID = supplier.ID 
INNER JOIN 
    item ON receive_item.ITEM_ID = item.ID 
INNER JOIN 
    po ON receive.PO_NUMBER = po.PO_ID 
LEFT OUTER JOIN 
    delivery_item ON receive_item.ITEM_ID = delivery_item.ITEM_ID 
    AND receive_item.RECEIPT_ID = delivery_item.RECEIVE_ID 
GROUP BY receive.RECEIPT_DATE, supplier.NAME, item.NAME AS Expr2, 
    receive_item.PRICE, receive_item.QTY; 

私はreceive.RECEIPT_IDを削除しました。これは一意のIDであるため、集計できないか、無効な結果が表示されます。残りの統計量を見ているので、領収書の日付列が必要かどうか疑問に思っていますが、それは実際にはクエリの目的によって異なります。この現在のものは、毎日残っている量を追跡することができます。

クイックノート:IFNULL(sum())とsum(IFNULL())の順序をテストしましたが、期待通りの結果には影響していないようです。私はそれよりも大きなデータセットで作業しているので、どちらの方法でも結果を正当にチェックしたいかもしれません。

0

配送する商品の残りの数量を残したいと思っています。 代わりの左参加delivery-itemあなたは左に参加する必要があり、それはすべてのグループのためのQTYの合計とITEM_IDRECEIVE_IDによってグループ化されました。

SELECT  receive.RECEIPT_ID, receive.RECEIPT_DATE, supplier.NAME, 
       item.NAME AS Expr2, receive_item.PRICE, receive_item.QTY, 
       (receive_item.QTY - IFNULL(delivery_group.QTY, 0)) AS 'REMAINED QTY.' 
FROM    
    receive_item 
INNER JOIN 
    receive ON receive_item.RECEIPT_ID = receive.RECEIPT_ID 
INNER JOIN 
    supplier ON receive.SUPPLIER_ID = supplier.ID 
INNER JOIN 
    item ON receive_item.ITEM_ID = item.ID 
INNER JOIN 
    po ON receive.PO_NUMBER = po.PO_ID 
LEFT OUTER JOIN 
    (SELECT ITEM_ID, RECEIVE_ID, SUM(QTY) AS QTY 
    FROM delivery_item 
    GROUP BY ITEM_ID, RECEIVE_ID) delivery_group 
ON receive_item.ITEM_ID = delivery_group.ITEM_ID 
AND receive_item.RECEIPT_ID = delivery_group.RECEIVE_ID 
関連する問題