我有一个要求,其中用户是用户将单个项目输入到表中,该表带有一个触发器,该触发器在表中创建有效的组合记录(即 Powerset 或子集)。我面临的挑战是记录可以具有父/子关系,并且在这种情况下,在 2^n 组值中存在无效的子集。
这是一个简化的例子。
数据:
ID Item Parent_ID 1 A Null 2 B Null 3 C Null 4 D 1
期望的输出:
A
B
C
D
A,B
A,C
B,C
A,D
A,B,C
A,B,D
A,C,D
A,B,C,D
在我意识到数据将具有父/子关系之前,我将使用以下代码:
WITH ctePowerset(Combo) AS (SELECT RTRIM(CONVERT(VarChar(30), Item_ID)) AS Item_ID
FROM dbo.tblPowerset
UNION ALL
SELECT CONVERT(Varchar(30), RTRIM(CONVERT(varchar(30), TL.Item_ID)) + ',' + cte.Combo) AS combo
FROM dbo.tblPowerset AS TL INNER JOIN
ctePowerset AS cte ON CONVERT(varchar(30), TL.Item_ID) <> cte.Combo AND TL.Item_ID < LEFT(cte.Combo, CHARINDEX(',',
cte.Combo + ',') - 1))
SELECT Combo
FROM ctePowerset AS ctePowerset_1
但是通过这个公用表表达式,我得到了所有 15 种可能的组合,而不仅仅是 12 种有效/所需的组合。
我是一名新手 SQL 程序员,我一直试图找出一个多星期的解决方案,但绝对没有成功。任何帮助将不胜感激(即使它告诉我这是一项不可能完成的任务)。希望我提供了足够的信息,有人可以帮助我。