SQL Server: выберите Parent-Child
У меня есть SQL Server 2008 с таблицей под названием ProductCategories, разработанной следующим образом:
Id | Name | ParentId
71 PCs NULL
32 MACs NULL
3 Keyboard 1
9 Mouse 1
5 Screen 1
11 Keyboard 2
7 Mouse 2
8 Screen 2
Я хотел бы выбрать из этой таблицы, и получить набор результатов, как это:
Id | Name | ParentId
71 PCs NULL
3 Keyboard 1
9 Mouse 1
5 Screen 1
32 MACs NULL
11 Keyboard 2
7 Mouse 2
8 Screen 2
Я попробовал это, но это, очевидно, дает мне те, у которых нет ParentId:
WITH Hierarchy
AS
(
SELECT
T1.Id, T1.ParentId
FROM
ProductCategories T1
WHERE
T1.parentid IS NULL OR
T1.parentid IN (SELECT id from ProductCategories WHERE parentid IS NULL)
UNION ALL
SELECT
T1.Id, T1.ParentId
FROM
ProductCategories T1
INNER JOIN
Hierarchy TH ON TH.Id = T1.ParentId
)
select *
from Hierarchy
order by parentid
Пожалуйста, помогите мне, если можете:)
-парень, который не знает SQL
2 ответа
Решение
Попробуй это:
Select Id, Name, ParentId
From ProductCategories
Order By Coalesce(ParentId, Id),
Coalesce(ParentId, 0), Name
Три заказа по пунктам,
- Coalesce (ParentId, Id): группирует записи по родителю как для самого родителя, так и для всех потомков этого родителя.
- Coalesce(ParentId, 0) Эта группа в каждом наборе, так что одна запись с нулевым родителем (родитель) сортируется в верхней части группы
- Имя, это сортирует детей в группе по имени
Попробуй это
SELECT id, name, parentId
FROM categories
ORDER BY ISNULL(parentId,id), id
Кстати, не должны ли первые два индекса в вашей таблице быть 1 и 2, а не 71 и 32?