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

时间:2013-05-29 19:50:04

标签: sql-server sql-server-2008 ssrs-2008

需要一些帮助/方向...

我有一个查询,它提供了许多地方所需的库存清单...
-Location
-SKU
-QtyNeeded

我有另一个查询,它给我一个可用库存清单......并且库存是序列化的(唯一编号) -SKU
-SerialNumber

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

示例...

查询1
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 个答案:

答案 0 :(得分:0)

尝试使用递归CTE(公用表表达式)进行查询1转

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

Store1 SKU1 2 1
Store1 SKU1 2 2
Store2 SKU1 1 3
Store1 SKU2 1 1
Store2 SKU2 2 2
Store2 SKU2 2 3

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

SKU1 serial1 1
SKU1 serial2 2
SKU1 serial3 3
SKU1 serial4 4
SKU1 serial5 5
SKU2 serial6 1
SKU2 serial7 2
SKU2 serial8 3
SKU2 serial9 4
SKU2 serial10 5
SKU3 serial11 1
SKU3 serial12 2

然后,您应该能够将结果加在您添加的新行号和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子句告诉它何时终止递归。