从具有父/子关系的数据生成Powerset值的SQL例程

时间:2014-10-08 16:05:07

标签: sql tree powerset

我有一个要求,即用户是用户将单个项目输入到具有触发器的表中,该触发器在表中创建有效的组合记录(即Powerset或子集)。我遇到的挑战是记录可以有父/子关系,在这种情况下,有些子集在2 ^ n组值中无效。

这是一个简化的例子。

数据:

 ID     Item     Parent_ID  
  1      A        Null  
  2      B        Null
  3      C        Null
  4      D        1  

期望的输出:

  

一个
  乙
  ç
  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程序员,我一直试图找出一个星期以上的解决方案,绝对没有成功。任何帮助将不胜感激(即使它告诉我这是一个不可能完成的任务)。 希望我提供了足够的信息,有人可以帮助我。

0 个答案:

没有答案
相关问题