Est-il possible d'élaborer une clause ORDER BY pour garantir les critères suivants pour deux champs (tous les deux de type INT), appelés respectivement child
et parent
pour cet exemple.Complexe TSQL order by clause
parent
référenceschild
, mais peut être nulle.- Un parent peut avoir plusieurs enfants; un enfant seul parent.
- Un enfant ne peut pas être un parent de lui-même.
- Il doit exister au moins un enfant sans parent.
- Chaque valeur de
child
doit apparaître avant qu'elle n'apparaisse dansparent
dans le jeu de résultats ordonné.
Je rencontre des difficultés au point 5.
échantillon de données non numérotée:
child parent
------------
1 NULL
3 5
4 2
2 5
5 NULL
Il est évident que ni le travail ORDER BY a, b
ou ORDER BY b, a
. En fait, plus j'y pense, plus je ne suis pas sûr que cela puisse même être fait. Compte tenu des restrictions, les cas évidents tels que:
child parent
------------
1 2
2 1
ne sont pas autorisés car il viole les règles 3 et 4 (et évidemment 5).
Alors, est ce que j'essaie d'atteindre possible, et si oui, comment? Plate-forme est SQL Server 2005.
Mise à jour: ordre de tri souhaité pour les données de l'échantillon:
child parent
------------
1 NULL
5 NULL
2 5
3 5
4 2
Pour chaque ligne qui définit une valeur non nulle dans la colonne parent, la valeur a déjà été présent Dans la colonne enfant.
Pourriez-vous montrer les données d'échantillon dans l'ordre souhaité, s'il vous plaît? Ce serait une aide. –
Ajouté selon votre demande, Brian. –