0

表 #1: qa_returns_items ここに画像の説明を入力

表 #2: qa_returns_residuesここに画像の説明を入力

私は長い間、この結果を取得しようとしています:

item_code -   item_quantity
2         -   1
3         -   2

IF qa_returns_items.item_code = qa_returns_residues.item_code AND status_code = 11 THEN

item_quantity = qa_returns_items.item_quantity - qa_returns_residues.item_quantity

ELSEIF qa_returns_items.item_code = qa_returns_residues.item_code AND status_code = 12 THEN

item_quantity = qa_returns_items.item_quantity + qa_returns_residues.item_quantity

そうしないと

show diferendes

END IF

私はこのクエリを試しました:

select  SubQueryAlias.item_code, 
        item_quantity
from    (
        select  
                ri.item_code
        ,       case status_code
                when 11 then ri.item_quantity - rr.item_quantity 
                when 12 then ri.item_quantity + rr.item_quantity
                end as item_quantity
        from    qa_returns_residues rr
        left join    qa_returns_items ri
        on      ri.item_code = rr.item_code
        WHERE ri.returnlog_code = 1
        ) as SubQueryAlias
where   item_quantity > 0 GROUP BY (item_code);

クエリは次の結果を返します。

item_code -   item_quantity
1         -   2
2         -   2
4

3 に答える 3

0

Try this query. I havn't tested it. It is very difficult what you require. But I have built it from table structure and given condition clause.

select qa_returns_items.item_code, 
       (CASE status_code
         WHEN 11 THEN (qa_returns_items.item_quantity - qa_returns_residues.item_quantity) 
         WHEN 12 THEN (qa_returns_items.item_quantity + qa_returns_residues.item_quantity)   END) as item_quantity , 
        qa_returns_residues.item_unitprice,
       ( qa_returns_residues.item_unitprice * item_quant) as item_subtotal,
       (qa_returns_residues.item_discount * item_quantity) as item_discount,
       ( ( qa_returns_residues.item_unitprice * item_quant) -   
         (qa_returns_residues.item_discount * item_quantity) ) as item_total
where
 item_quantity > 0 AND  qa_returns_items.item_code = qa_returns_residues.item_code

Update:

select qa_returns_items.item_code, 
           (CASE status_code
             WHEN 11 THEN (qa_returns_items.item_quantity - qa_returns_residues.item_quantity) 
             WHEN 12 THEN (qa_returns_items.item_quantity + qa_returns_residues.item_quantity)   END) as item_quant , 
            qa_returns_residues.item_unitprice,
           ( qa_returns_residues.item_unitprice * item_quant) as item_subtotal,
           (qa_returns_residues.item_discount * item_quantity) as item_discount,
           ( ( qa_returns_residues.item_unitprice * item_quant) -   
             (qa_returns_residues.item_discount * item_quantity) ) as item_total
    where
    (CASE status_code
             WHEN 11 THEN (qa_returns_items.item_quantity - qa_returns_residues.item_quantity) 
             WHEN 12 THEN (qa_returns_items.item_quantity + qa_returns_residues.item_quantity)   END) item_quant  > 0 AND  qa_returns_items.item_code = qa_returns_residues.item_code
于 2012-06-24T09:16:41.807 に答える
0

私は自分の問題を解決しました:

SELECT  
        item_code, 
        item_quantity, 
        item_unitprice, 
        item_subtotal, 
        item_discount, 
        item_total 
FROM (
        SELECT  qa_returns_items.item_code, 
                qa_returns_items.item_quantity, 
                qa_returns_items.item_unitprice, 
                qa_returns_items.item_subtotal, 
                qa_returns_items.item_discount, 
                qa_returns_items.item_total 
        FROM qa_returns_items 
        WHERE returnlog_code = 1
    UNION
        SELECT  qa_returns_residues.item_code, 
                qa_returns_residues.item_quantity, 
                qa_returns_residues.item_unitprice, 
                qa_returns_residues.item_subtotal, 
                qa_returns_residues.item_discount, 
                qa_returns_residues.item_total 
        FROM qa_returns_residues 
        WHERE returnlog_code = 1 
        ORDER BY item_code ASC
) 
AS SubQueryAlias
WHERE item_code NOT IN (
                        SELECT a.item_code 
                        FROM qa_returns_items a 
                        JOIN qa_returns_residues b 
                            ON b.item_code = a.item_code 
                        WHERE a.returnlog_code = 1 
                            AND b.returnlog_code = 1
                        );
于 2012-06-25T17:51:46.407 に答える
0

私の経験では、レコードのない新しいデータベースで最初からやり直し、段階的にデバッグを開始することをお勧めします。

最初にデータベースとテーブルを作成します。その後、単純なデータを持つ 2 つのレコードのみを挿入します。その後、デバッグを開始します。

問題をデバッグできたことから、サブセレクトにあります。見たいトピックでitem_code 2 and 3。次の理由により、これは発生しません。

SELECT ri.item_code,
       CASE status_code
       WHEN 11 then ri.item_quantity - rr.item_quantity 
       WHEN 12 then ri.item_quantity + rr.item_quantity
       END AS item_quantity
FROM      qa_returns_residues rr
LEFT JOIN qa_returns_items ri
ON        ri.item_code = rr.item_code
WHERE     ri.returnlog_code = 1   // Why do you need this for ?

戻り値

item_code   item_quantity
2           2
1           0
1           0
1           0
1           2

そして、メイン クエリは、 を持つ結果のみを選択しますitem_quantity > 0
したがって、あなたは

item_code   item_quantity
1           2
2           2

結果として。

この操作の目的はよくわかりませんが、単純な解決策が常に最善であることを心に留めておいてください!

于 2012-06-25T03:21:51.097 に答える