나는 나에게 복잡한 것처럼 보이는 것에 도움이 필요하다.여러 SQL 쿼리 또는 커서?
테이블 및 창고 테이블의 데카르트 제품 인 tbl1을 만들기 위해 쿼리를 만들었습니다. 그것은 모든 창고에 다시의 날 모든 항목을 제공 :
SELECT i.ItemID, w.WarehouseID
FROM Item i, Warehouse w
은 내가 이전 또는 그 수량 규칙 인 변수 일 (@datevar)와 동일 마지막 문서의 날짜를 확인 두 번째 쿼리 (TBL2)를 만들어
이 항목 창고 당 포함하는 세 번째 테이블을 구축 : 1 (PhysicalQtyRule = 1),이 항목 및 창고로,
SELECT MAX(CreateDate) AS [DATE1], ItemID, Quantity, WarehouseID FROM StockHistory WHERE PhysicalQtyRule = 1 AND CreateDate <= @datevar GROUP BY ItemID, Quantity, WarehouseID
이제 StockHistory 테이블에서 얻은, 좀 더 세 단계가 필요합니다 수량의 합계이지만 수량 규칙은 2 (PhysicalQtyRule = 2)이고 tbl2.date (존재하는 경우)와 날짜 @Datevar의 날짜는 StockHistory 테이블에서 가져옵니다. 비슷해 :
SELECT ItemID, WarehouseID, SUM(Quantity) FROM StockHistory WHERE PhysicalQtyRule = 2 AND CreateDate > tbl2.DATE1 --If exists AND CreateDate <= @datevar GROUP BY ItemID, WarehouseID
아이템 창고 당 양의 합을 포함하는 네 번째 테이블을 구축하지만, 양 규칙 3 (PhysicalQtyRule = 3) tbl2.date 사이의 날짜 (있는 경우) 및 날짜 StockHistory 테이블에서 가져온 @datevar 변수의 값. 뭐 그런 : 필요 커서 경우 나도 몰라
SELECT i.ItemID, w.WarehouseID, tbl2.Quantity + tbl3.Quantity – tbl4.Quantity AS [Qty] FROM Item i, Warehouse w
:
SELECT ItemID, WarehouseID, SUM(Quantity)
FROM StockHistory
WHERE PhysicalQtyRule = 3 AND CreateDate > tbl2.DATE1 --If exists
AND CreateDate <= @datevar
GROUP BY ItemID, WarehouseID
는 합계 수량 열이있는, 그런 일을 첫 번째에 따라 최종 테이블을 만듭니다 (저에게 새로운 것) 또는 여러 번의 쿼리가 있지만 StockHistory 테이블에 수백만 개의 레코드가 있으므로 최상의 성능이 중요합니다.
아무도 도와 줄 수 있습니까? 고맙습니다! 하나 개의 항목 만 한웨어 하우스
일부 샘플 데이터는 :
+--------+-------------+------------+-----------------+----------+
| ItemID | WarehouseID | CreateDate | PhysicalQtyRule | Quantity | Balance | comments
+--------+-------------+------------+-----------------+----------+
| 1234 | 11 | 2013-03-25 | 2 | 35 | 35 | Rule 2 = In
| 1234 | 11 | 2013-03-28 | 3 | 30 | 5 | Rule 3 = Out
| 1234 | 11 | 2013-04-01 | 1 | 3 | 3 | Rule 1 = Reset
| 1234 | 11 | 2013-07-12 | 2 | 40 | 43 | Rule 2 = In
| 1234 | 11 | 2013-09-05 | 3 | 20 | 23 | Rule 3 = Out
| 1234 | 11 | 2013-12-31 | 1 | 25 | 25 | Rule 1 = Reset
| 1234 | 11 | 2014-01-09 | 3 | 11 | 14 | Rule 3 = Out
| 1234 | 11 | 2014-01-16 | 3 | 6 | 8 | Rule 3 = Out
나는 어떤 변수 날짜에 균형을 알고 싶어요.
이 테이블 생성 결과로 최종 쿼리를 얻으려고하거나 모든 데이터를 적극적으로 저장해야합니까? – TTeeple
마지막 쿼리 만 필요합니다. 가장 좋은 설명을 시도하기 위해이 모든 조치를 취하십시오. – PJLG
몇 가지 샘플 데이터와 예상 결과를 제공해 주시겠습니까? – TTeeple