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 |