Saya harus mengikuti data dalam SQL Server 2008 R2. SQLFiddle
Skema:
CREATE TABLE [dbo]. [ICFilters] ( [ICFilterID] [int] IDENTITY (1,1) TIDAK NULL, [ParentID] [int] BUKAN NULL DEFAULT 0, [FilterDesc] [varchar] (50) BUKAN NULL, [Aktif] [tinyint] BUKAN NULL DEFAULT 1, CONSTRAINT [PK_ICFilters] PRIMARY KEY CLUSTERED ([ICFilterID] ASC) DENGAN PAD_INDEX = MATI, STATISTICS_NORECOMPUTE = MATI, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON ) ON [PRIMARY] ) ON [PRIMARY] Masukkan ke [dbo]. [ICFilters] (ParentID, FilterDesc, Aktif) Nilai-nilai (0, 'Jenis Produk', 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)
Meja:
| ICFILTERID | PARENTID | FILTERDESC | AKTIF | -------------------------------------------------- | 1 | 0 | Jenis Produk | 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 |
Setiap baris memiliki ID induknya dan root parentid = 0
. The FilterDesc
s adalah deskripsi hanya sampel jadi saya tidak bisa mencoba untuk mengurai mereka untuk pemesanan.
Pertanyaan
Apakah mungkin untuk memilih semua baris dengan cara seperti pohon? Jika ya, bagaimana caranya? Ketika saya mengatakan 'seperti pohon', maksud saya secara rekursif memilih orang tua diikuti oleh semua anak-anaknya, lalu semua anak dari masing-masing dari mereka dan seterusnya. Traversal pohon pertama Kedalaman.
Teman-teman saya dan saya telah mencoba tetapi kami gagal dalam solusi kerja tetapi akan terus berusaha. Saya cukup baru untuk sql jadi mungkin ini bisa dilakukan dengan mudah dan saya hanya membuat segalanya lebih sulit dari yang diperlukan.
Contoh (diinginkan) output:
| ICFILTERID | PARENTID | FILTERDESC | AKTIF | -------------------------------------------------- | 1 | 0 | Jenis Produk | 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 |