안녕하세요.
그동안 많은 도움을 받으면서 특별한 활동도 없이 눈팅만 하다가 처음으로 질문 남기는 것 같습니다.
다름이 아니라 재고관리 프로그램 로직을 짜면서 품목 등록하고, 기초재고 등록, 품목 출고, 품목 입고 등의
테이블을 조인해서 현재고를 계산하는 방법으로 어렵지 않게 재고를 관리했었는데
여기에 재고 이동이라는 부분을 추가하게 되었습니다.
재고 이동이 추가가 되면 원래 품목이 있던 창고의 현재고는 이동수량 만큼 숫자가 빠져나가야 하고
이동되는 창고의 품목은 숫자가 증가하는 방법으로 로직을 생각해서 조인을 해서 구문을 짜 보았는데
이런 저런 방법을 다 써봐도 원하는 계산 결과가 안 나옵니다.
[품목 테이블]
품목코드 품목명
10001 P600 카메라
10002 P100 카메라
[기초재고관리 테이블]
재고코드 품목코드 입력일 기초재고 창고명
10001 10001 3-20 5 성남창고
10002 10001 3-20 3 부산창고
[입고등록 테이블]
입고코드 품목코드 입력일 창고명 입고수량
10001 10001 3-20 성남창고 3
10002 10001 3-21 부산창고 2
[출고등록 테이블]
출고코드 품목코드 입력일 창고명 출고수량
10001 10001 3-25 성남창고 3
10002 10001 3-26 부산창고 4
[재고이동 테이블]
재고이동코드 품목코드 보관창고 이동수량 이동창고
10001 10001 성남창고 1 부산창고
10001 10001 성남창고 1 광주창고
재고이동 부분이 없을 땐 아래와 같은 방식으로 현재고를 나타내는데 어려움이 없었는데
재고 이동부분이 들어가니 해결이 안되네요.
재고 이동한 부분을 직접 입출고 합계에 계산해서 출고수량합계에 더해주거나 빼주어도
되긴 하는데 표시할 데이터는 그 수량을 출력 데이터에 아래와 같이 표시해 주는 것이
원하는 데이터 입니다.
[표시할 데이터]
품목코드, 품목명 창고명 입고수량합계 출고수량합계 이동출고계 이동입고계 현재고
10001 P600 카메라 성남창고 10 5 2 1 4
10001 P600 카메라 부산창고 2 2 0 1 1
표시할 데이터는 품목명과 창고별 입고 출고 합계를 표시해 주고 현재고를 계산해 주는 것입니다.
여기에서 현재고가 마이너스로 표시되거나 재고가 없는 부분은 출고가 안되게 하거나 하는 부분은
전혀 고려하고 있지 않습니다.
그 부분은 sql 이 아닌 C샵 에서 제어하는 방식으로 처리하려고 하기 때문에 문제가 될 것은 없어 보입니다.
고수님들의 현명한 조언을 부탁드립니다.
Comment 3
-
Terry
2015.04.08 10:13
-
건우아빠
2015.04.08 13:30
각각의 특성에 맞게 union으로 붙이 시는게 더 효과적이지 않을까요...
-
엘로이
2015.04.10 17:29
자답입니다.
조인을 이동출고처와 이동입고처에 따라 따로 만들어야 하기 때문에 조인을 없애고 서브쿼리에서 조건별로
조인을 만들어서 넣으니 한방에 해결되네요.
혹시 해결 방법이 궁금하실 분이 계실 까 해서 아래에 남깁니다.
select Item.ItemID, ItemStock.BaseJego, ItemStock.Changgo, isnull(sum(ItemIn.IiQuantity),0) as '입고계', isnull(sum(ItemOut.IoQuantity),0) as '출고계',
( SELECT isnull(sum(itemMove.ImQuantity),0) FROM ItemMove WHERE ItemMove.Changgo = ItemStock.Changgo and ItemMove.ItemID = Item.ItemID) AS '이동출고',
( SELECT isnull(sum(itemMove.ImQuantity),0) FROM ItemMove WHERE ItemMove.TChanggo = ItemStock.Changgo and ItemMove.ItemID = Item.ItemID) AS '이동입고'
FROM ItemStock
inner join item on item.itemid=itemstock.itemid
left join itemIn on ItemIn.ItemId= Item.ItemID and ItemStock.Changgo =ItemIn.Changgo
left join ItemOut on ItemOut.itemid =Item.ItemID and ItemStock.Changgo = ItemOut.Changgo
-- 이 부분은 삭제 left join itemMove on ItemMove.Itemid = ItemStock.ItemID and ItemMove.Changgo = ItemStock.Changgo
group by Item.ItemID, ItemStock.BaseJego, ItemStock.Changgo
창고재고 이동시..
실제 테이블에 데이터가 들어가야 맞을것으로 사료됩니다.
예)
입고코드 품목코드 입력일 창고명 입고수량
10002 10001 3-21 부산창고 2상기 품목이 3-21일에 1개의 수량이
부산창고 -> 성남창고
로 이동했다고 가정을 하면
1) 부산창고 출고수량
-> Insert Row 필요.. 출고수량 = 1
2) 성남창고 입고수량
-> Insert Row 필요..입고수량 = 1
재고 이동에 관한 Table 은 구성해두었으니
필요시, Join 하여
상세 내역은 확인 가능하리라 생각이 됩니다..
참고만 하세요.