J'ai la table hiérarchique suivante:Quelle est la manière la plus rapide/la plus simple de dénormaliser cette table hiérarchique en une table plate?
Table Category:
CategoryId, ParentCategoryId, CategoryName
1, null, SomeRoot
2, 1, SomeChild
3, 2, SomeGrandchild
4, 3, SomeGreatGrandchild
(notez ces données d'échantillon ne comprend pas une feuille sur un nœud plus haut que le niveau 4, mais cela est possible). Les données ne seront jamais plus profondes que le niveau 4, si cela est pertinent. Je voudrais transformer/pivot à ce fixe affichage 4 niveaux
CatId, Name1, Name2, Name3, Name4
1, SomeRoot, null, null, null
2, SomeRoot, SomeChild, null, null
3, SomeRoot, SomeChild, SomeGrandchild, null
4, SomeRoot, SomeChild, SomeGrandchild, SomeGreatGrandchild
Je l'ai fait parti des jointures externes à la table de catégorie 4 fois, et construit une déclaration énorme de cas pour détecter le niveau à utiliser pour la Champ ID, mais cela n'inclut pas les lignes nulles .... Des idées? AIDEZ-MOI!
Vous devez nous indiquer si les données auront toujours
jcollum
@jcollum Mise à jour Q: Les données ne seront jamais plus profondes que le niveau 4, si cela est pertinent. – TheSoftwareJedi
S'il a des niveaux de récursion inconnus, vous voulez utiliser un CTE. Pour les niveaux de récursion connus et petits, j'entends qu'un CTE a trop de frais généraux, donc une sous-requête est meilleure. – jcollum