Trouvé un problème intéressant ici.Trier par (parent, groupe d'enfants) et les valeurs par ordre alphabétique
ResultID ParentID ValueX
--------------------------
1 0 GrandParent
2 1 Parent1
3 1 Parent2
4 2 Child1
5 2 Child2
6 3 Child3
7 3 Child4
Je veux que mon résultat de la requête pour ressembler à ceci:
ResultID ParentID ValueX
--------------------------
1 0 GrandParent
2 1 Parent1
4 2 Child1
5 2 Child2
3 1 Parent2
6 3 Child3
7 3 Child4
Si le ParentID est 0, cela signifie que c'est une catégorie importante. Si ParentID est supérieur à 0, cela signifie que c'est une catégorie mineure, un enfant du parent.
Alors que les parents ont besoin d'être commandés A-Z et les enfants ont besoin d'être commandés A-Z en tant que groupe et dans ce groupe, les valeurs doivent être pris en considération pour le tri par ordre alphabétique. Ce ne se limite pas à 3 niveaux et peut aller jusqu'à 10.
Pouvez-vous me aider à obtenir ce commandé correctement?
WITH resultset (resultid, parentid, valuex) AS (
SELECT 1,0,'Grandparent' FROM dual UNION ALL
SELECT 2,1,'Parent1' FROM dual UNION ALL
SELECT 3,1,'Parent2' FROM dual UNION ALL
SELECT 4,2,'Child1' FROM dual UNION ALL
SELECT 5,2,'Child2' FROM dual UNION ALL
SELECT 6,3,'Child3' FROM dual UNION ALL
SELECT 7,3,'Child4' FROM dual)
SELECT ResultID , ParentID, ValueX
FROM resultset
ORDER BY ????
joli hack. Mais cela ne fonctionne que pour 4 niveaux. J'ai besoin de quelque chose de générique pour n'importe quel nombre de niveaux – SriniV
La question initiale dit que cela peut aller jusqu'à 10 niveaux, donc vous pouvez coder en dur cela avec une auto-jointure à 10 voies. A défaut, il serait plus élégant de faire cela en utilisant EXEC pour générer la requête que vous voulez (et la limiter au nombre de niveaux de hiérarchie requis à chaque fois, comme mentionné ci-dessus, pour des raisons de performances) – mc110