SQL查询-将一个查询的结果关联到没有相关字段的另一个查询



需要一些帮助/方向…

我有一个查询,给了我一个清单,在许多地方需要的库存…
位置
sku
-QtyNeeded

我有另一个查询,给了我一个可用库存列表…并且库存是序列化的(唯一的数字)。
sku
serialnumber

我想要达到的最终结果是……是运行一个查询,该查询将根据每个sku所需的数量为位置分配可用的SerialNumbers。

例子。

Query1
Store1 SKU1 2
Store1 SKU2 1
Store2 SKU1 1
Store2 SKU2 2

Query2
SKU1 serial1
SKU1 serial2
SKU1 serial3
SKU1 serial4
SKU1 serial5
SKU2 serial6
SKU2 serial7
SKU2 serial8
SKU2 serial9
SKU2 serial10
SKU3 serial11
SKU3 serial12


想要的结果…Store1 SKU1 serial1
Store1 SKU1 serial2
Store1 SKU2 serial6
Store2 SKU1 serial3
Store2 SKU2 serial7
Store2 SKU2 serial8

谢谢!
达林

尝试对查询1使用递归CTE(公共表表达式)来转

<>之前存储1 SKU1 2仓库1 SKU2 1仓库2 SKU1 1仓库2 SKU2 2之前

<>之前仓库1 SKU1 2 1存储1 SKU1 2 2仓库2 SKU1 1 3仓库1 SKU2 1 1仓库2 SKU2 2 2仓库2 SKU2 2 3之前

然后使用ROW_NUMBER () OVER ()添加查询2的行号:

<>之前SKU1 serial1 1SKU1 serial2SKU1 serial3SKU1 serial4SKU1 serial5 5SKU2 serial6 1SKU2 serial7 2SKU2 serial8SKU2 serial9 4SKU2 serial10 5SKU3 serial11SKU3 serial12之前

然后,您应该能够根据添加的新行号和SKU #将结果连接在一起。

编辑 -----------

添加CTE示例:

;with LocationQtyData as(
select
    location, sku, qtyneeded, 1 as rowNum
from #LocationQtys
union all
select
    #LocationQtys.location, #LocationQtys.sku, #LocationQtys.qtyneeded, rowNum + 1 as rowNum
from #LocationQtys
join LocationQtyData
    on LocationQtyData.location = #LocationQtys.location
    and LocationQtyData.sku = #LocationQtys.sku
where LocationQtyData.rowNum < #LocationQtys.qtyneeded
)
select * from LocationQtyData
order by
location, sku, qtyneeded, rowNum

将#LocationQtys替换为您的表名。注意,在查询的"union all"部分,我们可以引用CTE的名称("LocationQtyData")来递归地遍历它。where子句告诉它何时终止递归。

最新更新