Usuário com melhor resposta
Filtro em busca com auto-relacionamento

Pergunta
-
Tenho uma tabela no banco que tem um auto relacionamento, ex: Matriz > Filial > Unidade > Setor > Seção. Preciso buscar a Filial de um determinada Seção, já fiz a sql que monta essa hierarquia, só que ainda não to conseguindo buscar a Filial da Seção x
declare @Secao int set @Secao = 8; WITH Hierarquia AS ( SELECT a.Codigo, a.Nome, a.Nivel, CAST(ROW_NUMBER() OVER (ORDER BY a.Codigo) AS VARCHAR(MAX)) COLLATE Latin1_General_BIN AS bc FROM Area a WHERE AreaIdReference IS NULL UNION ALL SELECT a.Codigo, a.Nome, a.Nivel, Hierarquia.bc + '.' + CAST(ROW_NUMBER() OVER (PARTITION BY a.AreaIdReference ORDER BY a.Codigo) AS VARCHAR(MAX)) COLLATE Latin1_General_BIN FROM Area a JOIN Hierarquia ON a.AreaIdReference = Hierarquia.Codigo ) SELECT * FROM Hierarquia ORDER BY bc
Respostas
-
Boa tarde,
Experimente mais ou menos dessa forma:
declare @Secao int set @Secao = 8; WITH Hierarquia AS ( SELECT a.Codigo, a.Nome, a.Nivel, 0 as Filial, CAST(ROW_NUMBER() OVER (ORDER BY a.Codigo) AS VARCHAR(MAX)) COLLATE Latin1_General_BIN AS bc FROM Area a WHERE AreaIdReference IS NULL UNION ALL SELECT a.Codigo, a.Nome, a.Nivel, case when a.Nivel = 2 then a.Codigo else Hierarquia.Filial end, Hierarquia.bc + '.' + CAST(ROW_NUMBER() OVER (PARTITION BY a.AreaIdReference ORDER BY a.Codigo) AS VARCHAR(MAX)) COLLATE Latin1_General_BIN FROM Area a JOIN Hierarquia ON a.AreaIdReference = Hierarquia.Codigo ) SELECT fil.* FROM Hierarquia as sec join Hierarquia as fil on fil.Codigo = sec.Filial where sec.Codigo = @Secao
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta Pedro Ogm terça-feira, 28 de maio de 2013 18:41
-
Todas as Respostas
-
Boa tarde,
Experimente mais ou menos dessa forma:
declare @Secao int set @Secao = 8; WITH Hierarquia AS ( SELECT a.Codigo, a.Nome, a.Nivel, 0 as Filial, CAST(ROW_NUMBER() OVER (ORDER BY a.Codigo) AS VARCHAR(MAX)) COLLATE Latin1_General_BIN AS bc FROM Area a WHERE AreaIdReference IS NULL UNION ALL SELECT a.Codigo, a.Nome, a.Nivel, case when a.Nivel = 2 then a.Codigo else Hierarquia.Filial end, Hierarquia.bc + '.' + CAST(ROW_NUMBER() OVER (PARTITION BY a.AreaIdReference ORDER BY a.Codigo) AS VARCHAR(MAX)) COLLATE Latin1_General_BIN FROM Area a JOIN Hierarquia ON a.AreaIdReference = Hierarquia.Codigo ) SELECT fil.* FROM Hierarquia as sec join Hierarquia as fil on fil.Codigo = sec.Filial where sec.Codigo = @Secao
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta Pedro Ogm terça-feira, 28 de maio de 2013 18:41
-
-