Query SQL relação hierárquica

SQL Server

SQL

27/11/2019

Possuo uma tabela com hierárquica de ativos que chega até 12 níveis:
Ativo1 = Id1 | ParenetId = 0
|
|__Ativo2 = Id2 | ParentId = Id1
|
|__ Ativo3 = Id3 | ParentId = Id1

Preciso montar um relatório que faça exibição na mesma linha dos ativos na hierarquia.

Ativo Pai | Ativo Filho 1 | Ativo Filho 2 ...e por ai vai.

Preciso de ajuda para montar essa query!
SQL Server
Daniel Leite

Daniel Leite

Curtidas 0

Respostas

Chromusmaster

Chromusmaster

27/11/2019

Você tem a relação das tabelas que vai utilizar ? Qual SGBD que está usando?
GOSTEI 0
Daniel Leite

Daniel Leite

27/11/2019

Você tem a relação das tabelas que vai utilizar ? Qual SGBD que está usando?

Neste caso é apenas uma tabela, a relação ocorre nela mesma.
Eu estou utilizando o SQL Server 2012 nesta aplicação. Consegui montar a Query desta forma:

WITH ListaHierarquia_CTE AS

(
SELECT AT1.Id,
AT1.Cod,
AT1.Descricao,
AT1.Nivel,
AT1.IdAtivoPai,
1 AS Nivel
FROM Ativos AT1
WHERE AT1.IdAtivoPai IS NULL

UNION ALL

SELECT AT2.Id,
AT2.Cod,
AT2.Descricao,
AT2.Nivel,
AT2.IdAtivoPai,
Nivel + 1
FROM Ativos AT2
INNER JOIN ListaHierarquia_CTE CTE ON AT2.ParentAssetId = CTE.Id
)

SELECT CTE.Id AS IdAtivo,
CTE.Cod AS CodAtivo,
CTE.Descricao AS Descrição,
CTE.Nivel AS NivelAtivo,

N1.Id AS IdAtivo,
N1.Cod AS CodAtivo,
N1.Descricao AS Descrição,
N1.Nivel AS NivelAtivo,

N2.Id AS IdAtivo,
N2.Cod AS CodAtivo,
N2.Descricao AS Descrição,
N2.Nivel AS NivelAtivo,

N3.Id AS IdAtivo,
N3.Cod AS CodAtivo,
N3.Descricao AS Descrição,
N3.Nivel AS NivelAtivo

FROM ListaHierarquia_CTE CTE

INNER JOIN Ativos N1 ON N1.IdAtivoPai = CTE.Id
INNER JOIN Ativos N2 ON N2.IdAtivoPai = N1.Id
INNER JOIN Ativos N3 ON N3.IdAtivoPai = N2.Id

WHERE N3.Nivel = 4

utilizando mais algumas opções de filtro no WHERE consegui chegar ao resultado esperado.
agora estou avaliando o desempenho da QUERY.
GOSTEI 0
POSTAR