Muszę śledzić dane w SQL Server 2008 R2. SQLFiddle
Schemat:
CREATE TABLE [dbo]. [ICFilters] ( [ICFilterID] [int] TOŻSAMOŚĆ (1,1) NIE NULL, [ParentID] [int] NOT NULL DEFAULT 0, [FilterDesc] [varchar] (50) NOT NULL, [Aktywny] [tinyint] NOT NULL DEFAULT 1, CONSTRAINT [PK_ICFilters] PODSTAWOWY KLUCZ ZESTAWIONY ([ICFilterID] ASC) Z PAD_INDEX = WYŁ., STATISTICS_NORECOMPUTE = WYŁ., IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON ) W dniu [PODSTAWOWY] ) W dniu [PODSTAWOWY] INSERT INTO [dbo]. [ICFilters] (ParentID, FilterDesc, Active) Wartości (0, „typ produktu”, 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)
Stół:
| ICFILTERID | RODZICIEL | FILTERDESC | AKTYWNE | -------------------------------------------------- | 1 | 0 | Rodzaj produktu | 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 |
Każdy wiersz ma identyfikator swojego rodzica i katalogu głównego parentid = 0
. Są FilterDesc
to tylko przykładowe opisy, więc nie mogę parsować tych do zamówienia.
Pytanie
Czy można wybrać wszystkie wiersze w sposób podobny do drzewa? Jeśli tak to jak? Kiedy mówię „drzewko”, mam na myśli rekurencyjnie wybranie rodzica, a następnie wszystkich jego dzieci, a następnie wszystkich dzieci każdego z nich i tak dalej. Głębokie przejście przez drzewo.
Ja i moi przyjaciele próbowaliśmy, ale nie udało nam się rozwiązać problemu, ale nadal będziemy próbować. Jestem całkiem nowy w sql, więc może to można zrobić łatwo i po prostu robię wszystko trudniejszym niż to konieczne.
Przykład (pożądany) wynik:
| ICFILTERID | RODZICIEL | FILTERDESC | AKTYWNE | -------------------------------------------------- | 1 | 0 | Rodzaj produktu | 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 |