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

万一

我试过这个查询:

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

试试这个查询。我还没有测试过。你需要什么是非常困难的。但是我是从表结构​​和给定的条件子句中构建的。

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

更新:

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

以我的经验,我建议您从一个新的数据库重新开始,没有记录,然后逐步开始调试。

首先创建数据库和表。之后只插入 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 回答
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 回答