2013-08-07 3 views
1

합리적으로 간단한 구매 주문 추적 데이터베이스를 개발하려고합니다. 이 작업을 가장 효율적으로 수행하는 방법을 시각화하는 데 어려움이 있습니다. 나는 특정 순서를 만들기 위해 필요한 모든 개별 구성 요소의 목록을 생성 할 필요가반복적 인 SQL 쿼리

Purchase Order table: 
PO Number, Customer Product Number, Quantity 
6874  , ABC-0001     4 
6873  , XYX-2222     1 

Customer Product Table: 
Customer Product Number, Finished Goods Number 
ABC-0001    , 501-123 
ABC-0001    , 501-124 
ABC-0001    , 501-125 


Finished Goods Table: 
Finished Goods Number, Component Number, QTY Per FG 
501-123    , COMP-0001  , 1 
501-123    , COMP-0004  , 16 
501-123    , COMP-0009  , 12 
501-124    , COMP-0005  , 5 
501-124    , COMP-0003  , 9 
501-124    , COMP-0001  , 10 
501-125    , COMP-0006  , 3 
501-125    , COMP-0004  , 2 
501-125    , COMP-0003  , 1 

Component Table, Suppplier ID, (etc. etc. etc.) 
COMP-0001 
COMP-0002 
COMP-0003 
COMP-0004 
COMP-0005 
COMP-0006 
COMP-0007 
COMP-0008 
COMP-0009 
COMP-0010 

: 순간

나는 4 개 테이블이있다. 그래서 목록은 다음과 같이 보일 것입니다 :

COMP-0001 - 44 (order quantity = 4 * (1 in 501-123 + 10 in 501-124) 

등 등

이는 SQL에서 수행, 또는 내가 단계 단계의 중간 테이블을 커서를 사용하여 생성에 그것을해야 할 수 있습니다 ? 아주 간단한 것처럼 보이지만 어떻게해야하는지 한 가지 예를 찾을 수 없었습니다.

표는 상당히 큽니다.

Order table is around 6000 orders (some of which are already complete, typically 300 or so currently open) 
Customer Product Table around 2000 items 
Finished Goods around 2000 
The component table contains over 20,000 separate components 

결과를 얻는 데 올바른 방법이 있습니까?

도움을 주신 모든 도움.

+1

20.000 행이 멀리 "합리적"큰되는 것입니다. –

+0

@duinui, SQL은 20,000 행으로 하품합니다. 전혀 크지 않음 – logixologist

+4

Btw : 어떤 DBMS를 사용합니까? 포스트그레스? 신탁? 이는 제시된 해결책에 영향을 미칠 수 있습니다. –

답변

0

JOIN/GROUP BY이 필요한 것 같습니다.

SELECT po.[PO Number], fg.[Component Number], 
     SUM([Quantity]*[QTY Per FG]) Quantity 
FROM PurchaseOrder po 
JOIN CustomerProduct cp 
    ON po.[Customer Product Number]=cp.[Customer Product Number] 
JOIN FinishedGoods fg 
    ON cp.[Finished Goods Number] = fg.[Finished Goods Number] 
GROUP BY po.[PO Number], fg.[Component Number] 

SQL Server에 대한 An SQLfiddle to test with하지만, 테이블 이름이 인용 외에이 있어야 아무것도 특정 RDBMS 없습니다.

+1

처음으로 작업 해 주셔서 감사 드리며 심지어 SQLfiddle도 설정해 주셔서 감사합니다. 그게 얼마나 위대한 작은 도구입니까! – DuiNui

0

이 쿼리는 당신에게 원하는 결과를 제공해야합니다 :

SELECT C.COMPONENT , O.QUANTITY * (SUM(FG.QTY)) 
FROM ORDER O JOIN PRODUCT P ON O.CUSTOMER = P.CUSTOMER 
JOIN FINISHED_GOODS FG ON P.FINISHED_GOODS = FG.FINISHED_GOODS 
JOIN COMPONENT C ON FG.COMPONENT = C.COMPONENT 
WHERE P.PO_NUMBER = ? 
0
select 
    po.[PO Number], fg.[Component Number], 
    sum(po.[Quantity] * fg.[QTY Per FG]) as Quantity 
from PurchaseOrder as po 
    inner join CustomerProduct as cp on cp.[Customer Product Number] = po.[Customer Product Number] 
    inner join FinishedGoods as fg on fg.[Finished Goods Number] = cp.[Finished Goods Number] 
group by po.[PO Number], fg.[Component Number] 
+0

감사합니다. 완벽하게 작동했습니다. – DuiNui