Ir para conteúdo
Fórum Script Brasil
  • 0

Consulta Pai e Filho


Hellyson Lima

Pergunta

Estou com um pedido aqui que não sei como fazer e acho que não tem como.

Seguinte, tenho uma tabela com os serviços da empresa e nela consta a relação de pai para filho, exemplo:

Pai: HelpDesk

Filho: Reset de Senha

Pai: HelpDesk

Filho: Suporte Remoto

Pai: HelpDesk

Filho: Liberação de Acesso

Pai: Liberação de Acesso

Filho: Portaria

Pai: Liberação de Acesso

Filho: CPD

Pai: CPD

Filho: Criação de Logins

E assim por diante. Como poderia fazer um select que pegava toda essa relação e em todas as camadas (não tem um número fixo de camadas) e que ignore o looping, exemplo:

Pai: Liberação de Acesso

Filho: CPD

Pai: CPD

Filho: Liberação de Acesso.

Não sei se dá para compreender, se alguém tiver alguma luz, fico extremamente agradecido.

Até

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Boa tarde Amigo.

Não sei se entendi direito. Mas vamos lá...

Fiz um script com os dados que passou no exemplo acima:

- HelpDesk

- Reset de Senha

- Suporte Remoto

- Liberação de Acesso

- Portaria

- CPD

Fiz um loop, inserindo as correlações entre os campos (pelo q entendi, é isso q quer).

Peguei um pai e inseri todos os filhos, e assim por diante.

Roda o script abaixo e me fala se era isso q estava querendo, ok? Espero ter ajudado.

-- criação da temporária em instância. Roda apenas 1 vez.

create table #Tabela (Descricao varchar(30), controlePai tinyint identity)

create table #Relacionamentos (Pai varchar(30), Filho varchar(30))

-- inserção dos dados na tabela

insert into #Tabela (Descricao) values ('HelpDesk')

insert into #Tabela (Descricao) values ('Reset de Senha')

insert into #Tabela (Descricao) values ('Suporte Remoto')

insert into #Tabela (Descricao) values ('Liberação de Acesso')

insert into #Tabela (Descricao) values ('Portaria')

insert into #Tabela (Descricao) values ('CPD')

-- select * from #Tabela

-- roda o script por completo...

declare @Cont int

declare @Descricao varchar(30)

Set @Cont = 1

Set @Descricao = (select top 1 Descricao from #Tabela where controlePai=@Cont)

while @Cont < (select max(controlePai) from #Tabela)

Begin

insert into #Relacionamentos (Pai, Filho)

select @Descricao, descricao from #Tabela where controlePai<>@Cont

Set @Cont = @Cont + 1

Set @Descricao = (select top 1 Descricao from #Tabela where controlePai=@Cont)

End

-- até aqui.

-- ver o resultado

select * from #Relacionamentos

Link para o comentário
Compartilhar em outros sites

  • 0
Boa tarde Amigo.

Não sei se entendi direito. Mas vamos lá...

Fiz um script com os dados que passou no exemplo acima:

- HelpDesk

- Reset de Senha

- Suporte Remoto

- Liberação de Acesso

- Portaria

- CPD

Fiz um loop, inserindo as correlações entre os campos (pelo q entendi, é isso q quer).

Peguei um pai e inseri todos os filhos, e assim por diante.

Roda o script abaixo e me fala se era isso q estava querendo, ok? Espero ter ajudado.

-- criação da temporária em instância. Roda apenas 1 vez.

create table #Tabela (Descricao varchar(30), controlePai tinyint identity)

create table #Relacionamentos (Pai varchar(30), Filho varchar(30))

-- inserção dos dados na tabela

insert into #Tabela (Descricao) values ('HelpDesk')

insert into #Tabela (Descricao) values ('Reset de Senha')

insert into #Tabela (Descricao) values ('Suporte Remoto')

insert into #Tabela (Descricao) values ('Liberação de Acesso')

insert into #Tabela (Descricao) values ('Portaria')

insert into #Tabela (Descricao) values ('CPD')

-- select * from #Tabela

-- roda o script por completo...

declare @Cont int

declare @Descricao varchar(30)

Set @Cont = 1

Set @Descricao = (select top 1 Descricao from #Tabela where controlePai=@Cont)

while @Cont < (select max(controlePai) from #Tabela)

Begin

insert into #Relacionamentos (Pai, Filho)

select @Descricao, descricao from #Tabela where controlePai<>@Cont

Set @Cont = @Cont + 1

Set @Descricao = (select top 1 Descricao from #Tabela where controlePai=@Cont)

End

-- até aqui.

-- ver o resultado

select * from #Relacionamentos

Mais ou menos Fulvio.

é o seguinte...

Já existe uma tabela (asset) com o registro de pai e filho, o que preciso, é via um script ou select, pegar todas as relações que existem, o resultado seria m ais ou menos assim:

Daria um "select/script" para mostrar os filhos relacionados do pai HelpDesk:

Pai - Filho

================================

HelpDesk - Reset de Senha

HelpDesk - Suporte Remoto

HelpDesk - Liberação de Acesso

Liberação de Acesso - Portaria

Liberação de Acesso - CPD

CPD - Criação de Logins

Ou seja, mostrou os filhos "Reset de Senha", "Suporte Remoto" e "Liberação de Acesso", além dos filhos relacionados "Portaria" e "CPD" e o relacionado ao "CPD" que é o "Criação de Logins".

Seria como mostrar toda a árvore genealógica de uma familia, pelo avo, pegar os pais, depois os filhos de todos os pais, depois os filhos dos filhos, até acabar.

Deu para entender?

Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia Hellyson... ok, agora entendi!!! :.)

É.... essa ai ficou mais difícil mesmo.

Seguinte: criei a estrutura no mesmo esquema da outra. Inserido os filhos diretos, e depois fui inserindo os filhos dos filhos. Fiz duas colunas de controle, onde os filhos são inseridos para serem testados também.

Coloquei umas explicações no script. Pelos dados que me passou, rodou legal. Agora você terá q fazer os testes na base com mais registros, pra ver se está ok. Testa aí e depois você me fala, beleza?

-- Criação das tabelas em instância

create table #asset (Pai varchar(30), Filho varchar(30))

create table #Resultado (Pai varchar(30), Filho varchar(30), Controle int, Sequencial int identity)

-- inserção dos dados da tabela

insert into #asset (Pai, Filho) values ('HelpDesk', 'Reset de Senha')

insert into #asset (Pai, Filho) values ('HelpDesk', 'Suporte Remoto')

insert into #asset (Pai, Filho) values ('HelpDesk', 'Liberação de Acesso')

insert into #asset (Pai, Filho) values ('Liberação de Acesso', 'Portaria')

insert into #asset (Pai, Filho) values ('Liberação de Acesso', 'CPD')

insert into #asset (Pai, Filho) values ('CPD', 'Criação de Logins')

-- select * from #asset

Declare @Pai varchar(30)

Declare @Filho varchar(30)

Declare @Sequencial int

-- Aqui você passa o pai que deseja pesquisar

set @Pai='HelpDesk'

-- carga dos filhos diretos

insert into #Resultado (Pai, Filho)

select Pai, Filho from #asset where pai=@Pai

-- setando variaveis de controle

set @Sequencial = (select top 1 Sequencial from #Resultado where controle is null)

set @Filho = (select Filho from #Resultado where Sequencial=@Sequencial)

While @Filho <> ''

Begin

-- aqui você insere os filhos dos filhos com status de controle null, para nova verificação

-- na tabela de resultado, coloquei o nome do pai fixo. Caso queira alterar, trocar a variavel @Pai do select

insert into #Resultado (Pai, Filho)

select @Pai, Filho from #asset where pai=@Filho

update #Resultado set Controle=1 where Sequencial=@Sequencial

set @Sequencial = (select top 1 Sequencial from #Resultado where controle is null)

set @Filho = (select Filho from #Resultado where Sequencial=@Sequencial)

End

select * from #Resultado

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...