>cosa? scusa ma non sono molto afferrato...
scusate se intervengo. Se vi dovesse interessare questo è un metodo per farsi la gerarchia ricorsivamente. Secondo me avete tutto quello che vi serve:
USE tempdb;
GO
CREATE TABLE dbo.Nominativi
(
ID int NOT NULL PRIMARY KEY CLUSTERED
, Nome varchar(30) NOT NULL
, IDParent int NULL
)
GO
ALTER TABLE dbo.Nominativi
ADD CONSTRAINT FK_Self_Nominativi
FOREIGN KEY (IDParent)
REFERENCES dbo.Nominativi (ID)
GO
INSERT INTO dbo.Nominativi (ID, Nome, IDParent)
VALUES (1, 'BOSS 1', NULL)
INSERT INTO dbo.Nominativi (ID, Nome, IDParent)
VALUES (2, 'BOSS 2', NULL)
INSERT INTO dbo.Nominativi (ID, Nome, IDParent)
VALUES (3, 'Tizio', 1)
INSERT INTO dbo.Nominativi (ID, Nome, IDParent)
VALUES (4, 'Caio', 1)
INSERT INTO dbo.Nominativi (ID, Nome, IDParent)
VALUES (5, 'Bello', 2)
INSERT INTO dbo.Nominativi (ID, Nome, IDParent)
VALUES (6, 'Brutto', 2)
INSERT INTO dbo.Nominativi (ID, Nome, IDParent)
VALUES (7, 'Medio', 6)
INSERT INTO dbo.Nominativi (ID, Nome, IDParent)
VALUES (8, 'Ultimo', 7)
INSERT INTO dbo.Nominativi (ID, Nome, IDParent)
VALUES (9, 'Altro', 4)
GO
;WITH Gerarchia AS
(
SELECT
ID
, Nome
, IDParent
, Livello = 1
FROM
dbo.Nominativi
WHERE
IDParent IS NULL
-- membro di ricorsione
UNION ALL
SELECT
U.ID
, U.Nome
, U.IDParent
, Livello = G.Livello + 1
FROM
dbo.Nominativi U
JOIN Gerarchia G ON G.ID = U.IDParent
)
SELECT
G.ID
, REPLICATE('----|', G.Livello - 1) + SPACE(1) + G.Nome
, NomePadre = ISNULL(N.Nome, 'Nessuno')
FROM
Gerarchia G
LEFT JOIN dbo.Nominativi N ON N.ID = G.IDParent
GO
DROP TABLE dbo.Nominativi
GO
--
Alessandro Alpi | SQL Server MVP
http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org