4

私は3つのテーブルストックを持っています、内側、問題

ストックテーブルの列とデータ:

part_no | part_name | totalqty
10100        ciol      30
112233       abc       20
123456       coper      50

内向きテーブル:

part_no | qty
123456   10
123456   20
10100    20
112233   15
10100    25

発行表:

part_no | qty
112233   20
112233   15
123456   10
112233   25
10100    40
10100    20

私の希望する出力:

part_no | part_name  |inwardQty |issueQty
10100      coil         45     60
112233     abc          15     60
123456     coper        30     10

以下は私が書いたクエリですが、希望する出力が得られません

select s.part_no,s.part_name,sum(i.qty) as inwardQty,sum(p.qty)as issueQty 
from stock s 
left join inward i on s.part_no = i.part_no
left join issue p on s.part_no = p.part_no 
group by 
    s.part_no,s.part_name

このクエリによって次の出力を取得します:

part_no | part_name  |inwardQty |issueQty
10100      coil         90     120
112233     abc          45     60
123456     coper        30     20
4

2 に答える 2

4

問題は、のすべての行を、のすべての行と一致させていることです。これらの行は、同じ部分を処理しています。ここではサブクエリが最適だと思います。inwardissue

select s.part_no,s.part_name,i.qty as inwardQty,p.qty as issueQty 
from stock s 
left join
    (select part_no,sum(qty) as qty from inward group by part_no) i on s.part_no = i.part_no
left join
    (select part_no,sum(qty) as qty from issue group by part_no) p on s.part_no = p.part_no 

したがって、現在、各結合に結合する行は1つ(または0)だけであり、デカルト積は取得されません。

于 2012-07-05T06:53:08.793 に答える
1

このクエリを試してください:

SELECT 
    s.part_no, s.part_name,
    InwardQty = (SELECT SUM(qty) FROM @inward i WHERE i.part_no = s.part_no),
    IssueQty = (SELECT SUM(qty) FROM @issue p WHERE p.part_no = s.part_no)
FROM 
    dbo.stock s 
GROUP BY
    s.part_no, s.part_name

正確に希望の出力が得られます。

于 2012-07-05T07:10:08.187 に答える