SQL Server 2008 R2のデータをフォローする必要があります。SQLFiddle
スキーマ:
CREATE TABLE [dbo]。[ICFilters]( [ICFilterID] [int] IDENTITY(1,1)NOT NULL、 [ParentID] [int] NOT NULL DEFAULT 0、 [FilterDesc] [varchar](50)NOT NULL、 [アクティブ] [tinyint] NOT NULL DEFAULT 1、 CONSTRAINT [PK_ICFilters] PRIMARY KEY CLUSTERED ([ICFilterID] ASC)WITH PAD_INDEX = OFF、 STATISTICS_NORECOMPUTE = OFF、 IGNORE_DUP_KEY = OFF、 ALLOW_ROW_LOCKS = ON、 ALLOW_PAGE_LOCKS = ON )ON [プライマリ] )ON [プライマリ] INSERT INTO [dbo]。[ICFilters](ParentID、FilterDesc、Active) 値 (0、 '製品タイプ'、1)、 (1、 'ProdSubType_1'、1)、 (1、 'ProdSubType_2'、1)、 (1、 'ProdSubType_3'、1)、 (1、 'ProdSubType_4'、1)、 (2、 'PST_1.1'、1)、 (2、 'PST_1.2'、1)、 (2、 'PST_1.3'、1)、 (2、 'PST_1.4'、1)、 (2、 'PST_1.5'、1)、 (2、 'PST_1.6'、1)、 (2、 'PST_1.7'、0)、 (3、 'PST_2.1'、1)、 (3、 'PST_2.2'、0)、 (3、 'PST_2.3'、1)、 (3、 'PST_2.4'、1)、 (14、 'PST_2.2.1'、1)、 (14、 'PST_2.2.2'、1)、 (14、 'PST_2.2.3'、1)、 (3、 'PST_2.8'、1)
表:
| ICFILTERID | PARENTID | フィルターデスク| アクティブ| -------------------------------------------------- | 1 | 0 | 製品タイプ| 1 | | 2 | 1 | ProdSubType_1 | 1 | | 3 | 1 | ProdSubType_2 | 1 | | 4 | 1 | ProdSubType_3 | 1 | | 5 | 1 | ProdSubType_4 | 1 | | 6 | 2 | PST_1.1 | 1 | | 7 | 2 | PST_1.2 | 1 | | 8 | 2 | PST_1.3 | 1 | | 9 | 2 | PST_1.4 | 1 | | 10 | 2 | PST_1.5 | 1 | | 11 | 2 | PST_1.6 | 1 | | 12 | 2 | PST_1.7 | 0 | | 13 | 3 | PST_2.1 | 1 | | 14 | 3 | PST_2.2 | 0 | | 15 | 3 | PST_2.3 | 1 | | 16 | 3 | PST_2.4 | 1 | | 17 | 14 | PST_2.2.1 | 1 | | 18 | 14 | PST_2.2.2 | 1 | | 19 | 14 | PST_2.2.3 | 1 | | 20 | 3 | PST_2.8 | 1 |
すべての行には、その親のIDとルートのIDがありますparentid = 0
。FilterDesc
私は順序のものを解析しようとすることはできませんのでsがちょうどサンプル記述されています。
質問
ツリーのようにすべての行を選択することは可能ですか?もしそうなら、どのように?「ツリーのような」と言うときは、親を再帰的に選択し、その後にそのすべての子を選択し、次にそれらの各子のすべての子を選択します。深さ優先のツリートラバーサル。
私の友人と私は試してみましたが、私たちは実用的なソリューションに欠けていますが、試してみます。私はsqlにかなり慣れていないので、これを簡単に行うことができ、必要以上に難しくしているだけです。
例(望ましい)出力:
| ICFILTERID | PARENTID | フィルターデスク| アクティブ| -------------------------------------------------- | 1 | 0 | 製品タイプ| 1 | | 2 | 1 | ProdSubType_1 | 1 | | 6 | 2 | PST_1.1 | 1 | | 7 | 2 | PST_1.2 | 1 | | 8 | 2 | PST_1.3 | 1 | | 9 | 2 | PST_1.4 | 1 | | 10 | 2 | PST_1.5 | 1 | | 11 | 2 | PST_1.6 | 1 | | 12 | 2 | PST_1.7 | 0 | | 3 | 1 | ProdSubType_2 | 1 | | 13 | 3 | PST_2.1 | 1 | | 14 | 3 | PST_2.2 | 0 | | 17 | 14 | PST_2.2.1 | 1 | | 18 | 14 | PST_2.2.2 | 1 | | 19 | 14 | PST_2.2.3 | 1 | | 15 | 3 | PST_2.3 | 1 | | 16 | 3 | PST_2.4 | 1 | | 20 | 3 | PST_2.8 | 1 | | 4 | 1 | ProdSubType_3 | 1 | | 5 | 1 | ProdSubType_4 | 1 |