SQL Server:排列/组合而不循环

时间:2018-12-22 04:45:53

标签: sql sql-server permutation

我有两个数据集。第一个是产品配方以及组成配方的产品的表格。第二个数据集包含按产品的单独定价(我可以为一个产品设置多个价格)。

我要实现的目标是输出一个包含每个产品配方的唯一排列的结果集。输出中只应包含所有成分均在第二个数据集中定价的配方。

假设:一个配方最多可以配置5个组件(不再)。

DECLARE @ProductRecipe TABLE (ProductRecipeID INT, ComponentProductID INT)

INSERT INTO @ProductRecipe (ProductRecipeID, ComponentProductID) 
VALUES (21, 130), (21, 468), (21, 500), 
       (22, 468), (22, 500), 
       (23, 130), (23, 501)

DECLARE @ComponentPricing TABLE (PricingID INT, ProductID INT)

INSERT INTO @ComponentPricing (PricingID, ProductID)
VALUES (314023, 130), (313616, 130), (313071, 130),
       (312865, 130), (316323, 468), (316329, 468), (398864, 500)

我希望我的输出看起来像这样:

输出示例

synchronous

我已经尝试过CTE和自我联接,但是我什至无法接近所需的输出。.::

我正在使用SQL Server 2012

1 个答案:

答案 0 :(得分:0)

我将假设您正在使用SQL Server 2008或更高版本,这是使dense_rank()函数正常运行所必需的。

下面的解决方案通过注释中概述的几个步骤。有人说我将@ProductRecipe记录中的一个从(22, 130)更改为(22, 468),因为我认为它是预期的样本数据,因为所需输出的Component1包括{ {1}}的值为316323和316329。

答案:

PricingID