Вот упрощенный взгляд на таблицу, которая у меня есть
Категория
- CategoryId
- CategoryName
- ParentCategoryId
Как вы можете видеть, таблица каталога является таблицей, ссылающейся на себя, поэтому ее можно повторять, начиная с 0, который является поддельной «корневой» категорией (с таким же успехом может быть null, но это не так).
Пример данных:
1, Apples, 0
5, Yummy, 1
10, Really Yummy, 5
15, Yucky, 0
18, Some Sub Cat, 15
20, Some Deep Sub Cat, 18
25, Some Deep Sub Cat 2, 18
Самая глубокая иерархия любой категории может быть глубиной 4, и я пытаюсь получить результат, который выглядит следующим образом:
CatId, [up to 4 deep of category names on the hierarchy in separate columns, or null if none]
1, Apples, NULL, NULL, NULL
5, Apples, Yummy, NULL, NULL
10, Apples, Yummy, Really Yummy, NULL
15, Apples, Yucky, NULL, NULL
18, Apples, Yucky, Some Sub Cat, NULL
20, Apples, Yucky, Some Sub Cat, Some Deep Sub Cat
25, Apples, Yucky, Some Sub Cat, Some Deep Sub Cat 2
Этот SQL близок, но он генерирует его задом наперед, выровненным по левому краю
select c1.categoryid, c1.name, c2.name, c3.name, c4.name
from category c1
left outer join category c2
on c1.parentcategoryid = c2.categoryid
left outer join category c3
on c2.parentcategoryid = c3.categoryid
left outer join category c4
on c3.parentcategoryid = c4.categoryid
У кого-нибудь из гениев SQL есть хорошие идеи?