Je SQL Server 2008 avec une table appelée catégories de produit conçu comme ceci:SQL Server: Sélectionnez Parent-enfant
Id | Name | ParentId
71 PCs NULL
32 MACs NULL
3 Keyboard 1
9 Mouse 1
5 Screen 1
11 Keyboard 2
7 Mouse 2
8 Screen 2
je voudrais choisir de cette table, et d'obtenir un jeu de résultats comme ceci:
Id | Name | ParentId
71 PCs NULL
3 Keyboard 1
9 Mouse 1
5 Screen 1
32 MACs NULL
11 Keyboard 2
7 Mouse 2
8 Screen 2
J'ai essayé, mais cela me donne évidemment ceux sans ParentId premier:
WITH Hierarchy
AS
(
SELECT
T1.Id, T1.ParentId
FROM
ProductCategories T1
WHERE
T1.parentid IS NULL OR
T1.parentid IN (SELECT id from ProductCategories WHERE parentid IS NULL)
UNION ALL
SELECT
T1.Id, T1.ParentId
FROM
ProductCategories T1
INNER JOIN
Hierarchy TH ON TH.Id = T1.ParentId
)
select *
from Hierarchy
order by parentid
S'il vous plaît aidez-moi, si vous pouvez :)
- Le gars qui ne sait pas SQL
Que (en anglais) essayez-vous de faire? Je ne peux pas désosser votre intention à partir de la sortie que vous avez incluse. Il y a un nombre infini de façons de générer cette sortie à partir des données, mais probablement très peu qui généreraient la "bonne" sortie (qui fait ce que vous voulez) d'un sdet de données différent ... –
Comment votre jeu de résultats diffère à partir des données brutes dans la table, autre qu'un ordre de tri non documenté? – RedFilter
Pour éclaircir ceci: cette table se réfère à elle-même? Oui, apparemment c'est le cas. –