ここで調査した他の SQL 隣接リスト階層の問題とは異なると思われる解決しようとしている問題があります。すべての子が親の前にリストされるようにデータを並べ替えようとしています。特定の ParentID のすべての子と特定の ChildID のすべての親を返す CTE を既に持っていますが、それらは現在のニーズに適合しません。
私は2つのテーブルを持っています:
CREATE TABLE [dbo].[ItemMaster](
[ItemID] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](50) NOT NULL,
CREATE TABLE [dbo].[References](
[RefID] [int] IDENTITY(1,1) NOT NULL,
[ParentID] [int] NOT NULL,
[ChildID] [int] NOT NULL,
ItemMaster.ItemID から References.ParentID および References.ChildID の間には外部キー関係が存在します。
これが私のテーブルのデータの例です...
アイテムID、名前
- 1、A1
- 2、A2
- 3、A3
- 4、P1
- 5、P2
- 6、P3
- 7、P4
- 8、トップ
RefID、ParentID、ChildID
- 1,1,5
- 2,2,5
- 3,2,6
- 4,3,2
- 5,7,3
- 6,8,4
- 7,8,1
- 8,8,2
- 9,8,3
- 10,8,7
私が望む出力には、親の前に子がリストされている各 ItemID と Name がリストされます。このような...
アイテムID、名前
- 4、P1
- 5、P2
- 6、P3
- 1、A1
- 2、A2
- 3、A3
- 7、P4
- 8、トップ
ノート:
- ItemID は、0、1、または > 1 の親を持つことができます。
- 親を持たないものは、出力の一番上に表示されます。
- 参照テーブルの「最上位の親」に NULL 値がありません。
フィードバックを得るのに十分な詳細を提供し、十分に説明できたことを願っています。どんなアイデアでも大歓迎です!