Query SQL relação hierárquica
27/11/2019
0
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
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
Curtir tópico
+ 0
Responder
Posts
27/11/2019
Chromusmaster
Você tem a relação das tabelas que vai utilizar ? Qual SGBD que está usando?
Responder
27/11/2019
Daniel Leite
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.
Responder
Clique aqui para fazer login e interagir na Comunidade :)