ユーザーがテーブルに有効な組み合わせレコード (つまり、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 週間以上解決策を見つけようとしてきましたが、まったく成功しませんでした。どんな助けでも大歓迎です(これが不可能な仕事だと私に言うことであっても)。うまくいけば、私は十分な情報を提供し、誰かが私を助けることができます.