迭代SQL查询

迭代SQL查询,sql,database,Sql,Database,我试图开发一个相当简单的采购订单跟踪数据库。 我很难想象什么是最有效的方法 目前我有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

我试图开发一个相当简单的采购订单跟踪数据库。 我很难想象什么是最有效的方法

目前我有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中完成,还是必须在步骤中使用游标并在步骤之间生成中间表? 这似乎是一件非常简单的事情,但我还没有找到一个例子来说明如何做到这一点

这些桌子相当大

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
我这样做是不是达到目的的正确方法


感谢您的帮助。

您需要的似乎是
加入
/
群组

选择采购订单【采购订单编号】,成品【部件编号】,
总和([数量]*[每FG数量])数量
来自采购订单po
加入CustomerProduct cp
采购订单上【客户产品编号】=cp【客户产品编号】
连接成品成品fg
在cp上【成品编号】=fg【成品编号】
按采购订单分组。[采购订单编号],成品。[部件编号]

对于SQL Server,除了表名引用之外,不应该有任何特定于RDBMS的内容。

此查询应提供所需的结果:

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 = ?

20000行远远不是“合理”的大。@duinui,SQL将有20000行。一点也不大顺便问一下:你使用哪种数据库管理系统?博士后?神谕这可能会影响提供的解决方案。感谢您第一次工作,甚至是SQLfiddle设置。这是一个多么好的小工具啊!
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]