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
Daniel Leite

Daniel Leite

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

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar