1

かなり単純な注文書追跡データベースを開発しようとしています。これを行う最も効率的な方法を視覚化するのに苦労しています。

現時点では、4 つのテーブルがあります。

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

特定の注文を行うために必要なすべての個々のコンポーネントのリストを生成する必要があります。したがって、リストは次のようになります。

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

などなど

これは SQL でのみ実行できますか、それとも、カーソルを使用してステップ間で中間テーブルを生成するステップで実行する必要がありますか? これは非常に簡単なことのように思えますが、その方法の例を 1 つも見つけることができませんでした。

テーブルは適度に大きいです。

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

結果を達成するための正しい方法でこれを行っていますか?

感謝して受け取った助け。

4

3 に答える 3

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]
于 2013-08-07T06:55:11.003 に答える
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 でテストするための SQLfiddle ですが、テーブル名の引用以外には、RDBMS 固有のものは何もないはずです。

于 2013-08-07T06:49:46.023 に答える
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 = ?
于 2013-08-07T06:50:16.700 に答える