Ich muss Daten in SQL Server 2008 R2 folgen. SQLFiddle
Schema:
CREATE TABLE [dbo]. [ICFilters] ( [ICFilterID] [int] IDENTITY (1,1) NOT NULL, [ParentID] [int] NOT NULL DEFAULT 0, [FilterDesc] [varchar] (50) NICHT NULL, [Aktiv] [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 [PRIMARY] ) ON [PRIMARY] INSERT INTO [dbo]. [ICFilters] (ParentID, FilterDesc, Active) Werte (0, 'Produkttyp', 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)
Tabelle:
| ICFILTERID | PARENTID | FILTERDESC | AKTIV | -------------------------------------------------- | 1 | 0 | Produkttyp | 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 |
Jede Zeile hat die ID des übergeordneten Elements und des Stammelements parentid = 0
. Die FilterDesc
s sind nur Beispielbeschreibungen, daher kann ich nicht versuchen, diese für die Bestellung zu analysieren.
Die Frage
Ist es möglich, alle Zeilen baumartig auszuwählen? Wenn das so ist, wie? Wenn ich "baumartig" sage, meine ich, rekursiv den Elternteil auszuwählen, gefolgt von allen seinen Kindern, dann allen Kindern von jedem von diesen und so weiter. Eine erste Baumdurchquerung der Tiefe.
Meine Freunde und ich haben es versucht, aber wir haben keine funktionierenden Lösungen gefunden, werden es aber weiter versuchen. Ich bin ziemlich neu in SQL, also kann das vielleicht leicht gemacht werden und ich mache die Dinge nur schwieriger als nötig.
Beispiel (gewünschte) Ausgabe:
| ICFILTERID | PARENTID | FILTERDESC | AKTIV | -------------------------------------------------- | 1 | 0 | Produkttyp | 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 |