Question

I write this post, i have this structure of table.

CREATE TABLE #TEMP 
(
 IdNode varchar(5), 
 IdSubNode varchar(5), 
 Lvl int 
)

INSERT INTO #TEMP VALUES ('A', null,0), ('A','B',1), ('A','C',1), ('A','D',1)
INSERT INTO #TEMP VALUES ('B','B1',2), ('B','B2',2), ('B','B3',2)
INSERT INTO #TEMP VALUES ('D','D1',2), ('D','D2',2), ('D','D3',2)
INSERT INTO #TEMP VALUES ('B1','BB1',3), ('B1','BB2',3), ('B1','BB3',3)

SELECT * FROM #TEMP

Please, i need a query like this:

/* -- I need this format
A / 
  / B /
      / B1 
           / BB1
           / BB2
           / BB3
      / B2 
      / B3
  / C /
  / D /
      / D1 
      / D2 
      / D3
*/

I will appreciate your help.

Était-ce utile?

La solution

Do you want something like this?

SELECT DISTINCT *
FROM
(
SELECT DISTINCT IdNode AS '1st_Level'
FROM #TEMP
WHERE LEN(IdNode)=1
UNION ALL
SELECT DISTINCT IdSubNode AS '1st_Level'
FROM #TEMP
WHERE LEN(IdSubNode) = 1)A

LEFT JOIN
(SELECT DISTINCT IdNode AS '2nd_Level'
FROM #TEMP
WHERE LEN(IdNode)=2
UNION ALL
SELECT DISTINCT IdSubNode AS '2nd_Level'
FROM #TEMP
WHERE LEN(IdSubNode) = 2)B
ON A.[1st_Level] = LEFT(B.[2nd_Level],1)

LEFT JOIN
(SELECT DISTINCT IdNode AS '3rd_Level'
FROM #TEMP
WHERE LEN(IdNode)=3
UNION ALL
SELECT DISTINCT IdSubNode AS '3rd_Level'
FROM #TEMP
WHERE LEN(IdSubNode) = 3)C
ON LEFT(B.[2nd_Level],1) = LEFT(C.[3rd_Level],1)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top