2017-03-28 1 views
0

J'ai une tabledonnées de commande avec association réflexive

enter image description here

Ce tableau représente un ensemble de technologies et subtechnologies. Une technologie peut contenir n sous-technologies et 1 subtecn est contenue par un tecn.

J'ai besoin commander cet ensemble comme celui-ci

enter image description here

Je vous remercie de votre aide.

+0

commande par FK_idTecnFK, PK_idTecn ?? –

+0

Comment voulez-vous gérer les valeurs nulles? Est-ce que le nom doit être commandé ou est-ce juste une coïncidence? – owczarek

+0

Vous avez besoin d'un CTE récursif pour calculer le chemin et l'ordre de la hiérarchie par le chemin. Voir l'exemple http://stackoverflow.com/questions/14241936/how-can-i-generate-a-hierarchy-path-in-sql-that-leads-to-a-given-node – Serg

Répondre

1

Cela pourrait être une solution à votre question, sans utiliser CTE récursive

DECLARE @T TABLE (IdTech INT, IdTechFK INT, Name VARCHAR(255)) 
INSERT INTO @T VALUES 
(1, NULL, 'FRT'), 
(2, 1, 'FRT_1'), 
(3, 1, 'FRT_2'), 
(4, NULL, 'GSC filters'), 
(5, 4, 'GSC filters_1'), 
(6, 4, 'GSC filter_2'), 
(7, 1, 'FRT_3'), 
(8, 1, 'FRT_4'), 
(9, NULL, 'Power Control') 

SELECT a.IdTech, a.IdTechFK, a.Name 
FROM (
SELECT m.IdTech, m.IdTechFK, m.Name, m.IdTech AS r FROM @T AS m 
WHERE m.IdTechFK IS NULL 
UNION ALL 
SELECT c.IdTech, c.IdTechFK, c.Name, c.IdTechFK AS r FROM @T AS c 
WHERE c.IdTechFK IS NOT NULL) AS a 
ORDER BY a.r, idtech, IdTechFK 

Résultat

+-------+---------+--------------+ 
|IdTech |IdTechFK |Name   | 
+-------+---------+--------------+ 
|1  |NULL  |FRT   | 
|2  |1  |FRT_1   | 
|3  |1  |FRT_2   | 
|7  |1  |FRT_3   | 
|8  |1  |FRT_4   | 
|4  |NULL  |GSC filters | 
|5  |4  |GSC filters_1 | 
|6  |4  |GSC filter_2 | 
|9  |NULL  |Power Control | 
+-------+---------+--------------+ 
+0

Ceci peut être une solution seulement si La récursion n'a pas plus d'un niveau. – Serg

+0

@Serg: Je suis d'accord là-dessus, j'ai basé ma solution sur les données données – Kevin