MSSQL 排列/组合 - 使用数据子集查找所有可能的匹配项

杰拉德·斯金纳

在 MSSQL 中,我有一个表 (ProductRecipe),其中最多包含 5 个不同的组件产品。然后我有一个包含单个组件产品及其成本的数据集。

我想要做的是找到满足我的食谱的所有不同的排列/组合。

CREATE TABLE #ProductRecipe (ProductRecipeID INT, Component1 INT, Component2 INT, Component3 INT, Component4 INT, Component5 INT)
CREATE TABLE #ComponentPricing (RowID INT, PricingID INT, ProductID INT, ProductDescription VARCHAR(50), Cost DECIMAL(18,6))

INSERT INTO #ProductRecipe (ProductRecipeID, Component1, Component2) VALUES (21, 130, 468)
INSERT INTO #ComponentPricing (RowID, PricingID, ProductID, ProductDescription, Cost)
VALUES (1, 314023, 130, 'ULS2', 1.783800)
 , (2, 313616, 130, 'ULS2', 1.783800)
 , (3, 313071, 130, 'ULS2', 1.794000)
 , (4, 312865, 130, 'ULS2', 1.789500)
 , (5, 316323, 468, 'B100', 1.550500)

SELECT * FROM #ProductRecipe
SELECT * FROM #ComponentPricing

DROP TABLE #ProductRecipe
DROP TABLE #ComponentPricing

我试图实现的结果是我最终得到了 4 种不同的配方变体,因为前 4 条记录(对于 ProductID 130)可以与最后一条记录(ProductID 468)混合。只能混合这两种产品,因为它们是我的 ProductRecipe 表中定义的两种成分产品。

预期结果:第1+5行,第2+5行,第3+5行,第4+5行;返回 PricingID 列。

ProductRecipeID Component1 Component2 Component3 Component4 Component5
21              314023     316323   
21              313616     316323   
21              313071     316323   
21              312865     316323   
罗斯·布什

看看这是否有效。

DECLARE @ProductRecipe TABLE (ProductRecipeID INT, Component1 INT, Component2 INT, Component3 INT, Component4 INT, Component5 INT) 
DECLARE @ComponentPricing TABLE (RowID INT, PricingID INT, ProductID INT, ProductDescription VARCHAR(50), Cost DECIMAL(18,6)) 

INSERT INTO @ProductRecipe (ProductRecipeID, Component1, Component2,Component3) VALUES (21, 130, 468,221)
INSERT INTO @ComponentPricing (RowID, PricingID, ProductID, ProductDescription, Cost)
VALUES (1, 314023, 130, 'ULS2', 1.783800)
 , (2, 313616, 130, 'ULS2', 1.783800)
 , (3, 313071, 130, 'ULS2', 1.794000)
 , (4, 312865, 130, 'ULS2', 1.789500)
 , (5, 316323, 468, 'B100', 1.550500)
 , (6, 316322, 221, 'B1110', 1.5250500)

;WITH UnpivotedRecipe AS
(
    SELECT 
        ProductRecipeID, ComponentID
    FROM
        (SELECT * FROM @ProductRecipe) AS P
        UNPIVOT(ComponentID FOR V IN(Component1,Component2,Component3,Component4,Component5))AS UP
)
, JoinedData AS
(
    SELECT 
        ProductRecipeID, ComponentID, RowID
    FROM 
        UnpivotedRecipe R
        INNER JOIN @ComponentPricing C ON C.ProductID = R.ComponentID

)
SELECT DISTINCT J1.ComponentID,J1.RowID,J2.ComponentID FROM JoinedData J1
CROSS JOIN JoinedData J2
WHERE
    J1.ComponentID<>J2.ComponentID

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

R中所有列的排列组合

来自分类Dev

与路径的排列组合?

来自分类Dev

在Haskell中清除排列组合

来自分类Dev

查找没有排列的数组的所有可能组合

来自分类Dev

查找给定编号的所有可能排列和组合。使用Python在列表中的元素

来自分类Dev

使用LINQ排列集合元素的所有可能组合

来自分类Dev

查找分配时间内的排列的所有匹配项

来自分类Dev

如何从所有排列中生成所有可能的组合?

来自分类Dev

使用c ++的排列和/或组合

来自分类Dev

排列和不排列组合将k个球分配到n个不同容量的容器中

来自分类Dev

使用excel查找所有可能的组合

来自分类Dev

使用Prolog查找不成对排列的组合

来自分类Dev

查找列表元素的所有可能排列,直到组合达到提供的长度

来自分类Dev

PostgreSQL在递归查询中找到所有可能的组合(排列)

来自分类Dev

所有排列/组合以用数据帧填充时隙

来自分类Dev

所有排列/组合以用数据帧填充时隙

来自分类Dev

字符串中所有可能的排列或选定字符替换的组合(带排列)

来自分类Dev

如何使用条件排列获得所有组合

来自分类Dev

带有IF的MSSQL WHERE

来自分类Dev

带有IF的MSSQL WHERE

来自分类Dev

使用MSSQL的ARITHABORT

来自分类Dev

查找三个排列列表的可能组合数

来自分类Dev

使用SQL查找列变量的所有可能组合

来自分类Dev

mssql中的initcap等效项

来自分类Dev

高效的PHP算法可生成输入的所有组合/排列

来自分类Dev

如何生成多个数组的所有排列/组合?

来自分类Dev

高效的PHP算法可生成输入的所有组合/排列

来自分类Dev

MSSQL:查找两个日期之间的所有项目

来自分类Dev

无法从MSSQL提取varbinary数据

Related 相关文章

热门标签

归档