У меня есть SQL Server 2008 с таблицей называется ProductCategories разработан так:SQL Server: Выберите Parent-Child
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
Что (на английском) вы пытаетесь сделать? Я не могу перепроектировать ваше намерение с вывода, который вы включили. Существует бесконечное количество способов генерации этого вывода из данных, но, вероятно, очень мало того, что генерирует «правильный» вывод (который делает то, что вы хотите) из другого sdet данных ... –
Как ваш результирующий набор отличается из необработанных данных в таблице, кроме недокументированного порядка сортировки? – RedFilter
Чтобы это решить: эта таблица относится к самому себе? Да, похоже, это так. –