【发布时间】:2018-12-21 17:22:18
【问题描述】:
在 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
【问题讨论】:
-
具体的数据库引擎是什么? PostgreSQL、Oracle、DB2 等。该解决方案很可能是特定于数据库的。
-
这是 MSSQL 2012
-
为什么要裁员?配方 ID 和配方在成分表中的成分编号,还有配方中的成分产品 ID 和隐含的成分编号。那么为什么有五列用于组件,而不仅仅是一个列出每个配方的组件的表格?我建议你修改那个设计。
-
好点。在我被卡住的时候,这是我拥有的数据。从技术上讲,存在冗余的原因是因为我过滤了更大的数据子集,只包括我的食谱中存在的产品。我将更新示例代码以使其更加清晰。谢谢!
标签: sql combinations permutation