1

SQLFiddle を追加: http://sqlfiddle.com/#!3/0792f/6/0

次のテーブル構造があるとします。

次の基本データを想定してみましょう。

1,10
1,11
2,10
2,11
3,10
3,11
3,12
3,13
4,10
4,13

このデータに基づいて、私の結論は次のようになります。

- 10 has 4 occurrences (parent 1+2+3+4)
- 11 has 3 occurrences (parent 1+2+3)
- 12 has 1 occurrence (parent 3)
- 13 has 2 occurrences (parent 3+4)
- 10+11 has 3 occurrences (parent 1+2+3)
- 10+13 has 2 occurrences (parent 3+4)
- 10+11+12 has 1 occurrence (parent 3)
- 10+11+12+13 has 1 occurrence (parent 3)

要するに、子とその出現回数のすべての一意の組み合わせを同じ親に取得したいと考えています。

私の最初のセットアップは、ものにクロス適用することでした:

SELECT
ca1.childs entitlements,
ca1.child_count,
COUNT(r.id_object_parent) same_parent_count
FROM Relationships r
CROSS APPLY (SELECT (SELECT COUNT(rg.id_object_child)
    FROM Relationships rg
    WHERE rg.id_object_parent = r.id_object_parent), STUFF((SELECT ',' + CONVERT(varchar,rg.id_object_child)
    FROM Relationships rg
    WHERE rg.id_object_parent = r.id_object_parent
    GROUP BY rg.id_object_child
    FOR XML PATH('')), 1, 1, '')) ca1 (child_count, childs)
GROUP BY ca1.childs, ca1.child_count

このクエリの問題は、すべての一意の「パターン」を取得するだけでなく、「完全な」パターンのみを取得することです。最終結果は、子 10+11 も親 3 のサブオカレンスであるため、このクエリは親 #3 を正しく処理しませんが、このクエリはそれを無視します。

助言がありますか?

4

0 に答える 0