SQL Server: Selezionare padre-figlio
-
22-09-2019 - |
Domanda
ho SQL Server 2008 con una tabella denominata categorie merceologiche progettato in questo modo:
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
Vorrei scegliere da questa tabella, e ottenere un set di risultati come questo:
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
Ho provato a farlo, ma che ovviamente mi dà quelle senza ParentId prima:
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
Please help me, se potete:)
- Il ragazzo che non conosce SQL
Soluzione
provare questo:
Select Id, Name, ParentId
From ProductCategories
Order By Coalesce(ParentId, Id),
Coalesce(ParentId, 0), Name
Tre clausole ORDER BY,
- Coalesce (ParentId, Id): Questo gruppo i record per il genitore, sia per il genitore stesso e tutti i figli di quel genitore
- Coalesce (ParentId, 0) This gruppi all'interno di ciascuna serie in modo che l'uno record con un genitore nullo (il genitore) ordina all'inizio all'interno del gruppo
- nome, questo ordina i bambini all'interno del gruppo per nome
Altri suggerimenti
Prova questo
SELECT id, name, parentId
FROM categories
ORDER BY ISNULL(parentId,id), id
A proposito, non dovrebbero primi due indici della tabella essere 1 e 2, non 71 e 32?
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow