1

ユーザーがテーブルに有効な組み合わせレコード (つまり、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  

しかし、この共通テーブル式を使用すると、12 の有効な/必要な組み合わせだけでなく、15 の可能な組み合わせすべてを取得できます。

私は初心者の SQL プログラマーであり、1 週間以上解決策を見つけようとしてきましたが、まったく成功しませんでした。どんな助けでも大歓迎です(これが不可能な仕事だと私に言うことであっても)。うまくいけば、私は十分な情報を提供し、誰かが私を助けることができます.

4

0 に答える 0