Вывод категорий и подкатегорий по ключу (категории и подкатегории находятся в одной таблице)

Есть таблица Category

`

CREATE TABLE [dbo].[Category](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [Name] [nvarchar](max) NOT NULL,
    [ParentCategoryID] [int] NULL,
 CONSTRAINT [PK_Category] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
`

Код запроса выводит основные категории

`
select * from [dbo].[Category] where [ParentCategoryID] is null
`

У категорий могут быть подкатегории, у подкатегорий также могут быть подкатегории.

Как можно вывести их последовательно? Например:

категория 1 подкатегория 1 категории 1 подкатегория 2 категории 1 подподкатегория 1 подкатегории 2 категории 1 подкатегория 3 категории 1 категория 2 подкатегория 1 категории 2 подподкатегория 1 подкатегории 1 категории 2 подкатегория 2 категории 2 подподкатегория 1 подкатегории 2 категории 1


Ответы (1 шт):

Автор решения: koshe

Возможно с помошью рекурсивного запроса таким образом:

WITH ct as
(
    SELECT ID, Name, ParentCategoryID,ID as PID,0 AS LVL
    FROM     Category
    WHERE ParentCategoryID IS NULL
    UNION ALL
    SELECT b.*,a.PID,A.LVL+1 as LVL
    FROM ct a
         INNER JOIN Category b ON a.ID=b.ParentCategoryID
)
SELECT * FROM ct ORDER BY PID,LVL
→ Ссылка