Eu tenho trabalhado em uma consulta dada por um dos meus desenvolvedores que trabalha em relatórios de cristal como DBA júnior, sempre gosto de ajudá-los, mesmo estando ocupado com outras coisas, pois isso aumentará meu conhecimento em T-sql. O cenário atual era simples como fazer uma autojunção. o esquema para este cenário é dado abaixo
create table resource(
res_id int,res_name varchar(20), man_id int)
preenchendo o conteúdo e executando a consulta abaixo, forneça o nome do recurso e seu gerenciador
SELECT a.res_name,b.res_name AS manager FROM dbo.RESOURCE a INNER JOIN dbo.RESOURCE b
ON b.res_id=a.man_id
res_name manager
------------------
sam will
sunny helen
will micah
mas da próxima vez que meu amigo entrar em meu cubículo, ele precisa de uma resposta diferente da anterior, ele precisa de um resultado como este
Sam Will Micah
então, como vou encadear os resultados? Não faço ideia por onde começar.
Você está procurando criar uma visão como esta:
Se você deseja obter a hierarquia do funcionário, deve usar o CTE recursivo. Confira este artigo no SqlAuthority: SQL SERVER – Introduction to Hierarchical Query using a Recursive CTE .
Também pode ser bom fazer o contrário - começando com o gerenciamento de nível superior, descendo pela hierarquia organizacional, como aqui. Como um guia, se uma organização tiver cerca de 8 funcionários por gerente, 5 níveis de gerenciamento serão suficientes para até 8 ^ 5 = 32768 funcionários, portanto, você raramente precisará de recursão para isso.