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

È stato utile?

Soluzione

provare questo:

Select Id, Name, ParentId
From ProductCategories
Order By Coalesce(ParentId, Id), 
   Coalesce(ParentId, 0), Name

Tre clausole ORDER BY,

  1. Coalesce (ParentId, Id): Questo gruppo i record per il genitore, sia per il genitore stesso e tutti i figli di quel genitore
  2. 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
  3. 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
scroll top