none
Select de Rastreabilidade de dados RRS feed

  • Pergunta

  • Pessoal

       Num processo de rastreabilidade, com os dados abaixo, qual seria a melhor maneira de fazer uma pesquisa onde teria o codigo id_bordero = 50, e eu chegar ao id_bordero = 44, e mostrar a informação 244 que seria a informação do campo id_chave_Controle_doc ?

    sexta-feira, 6 de dezembro de 2013 22:07

Respostas

  • Deleted
    • Marcado como Resposta Giovani Cr sexta-feira, 13 de dezembro de 2013 17:41
    sábado, 7 de dezembro de 2013 00:09
  • Olá,

        Eu gosto da idéia de utilizar autorrelacionamento. Veja se o exemplo abaixo te ajuda.

    select c.id_Chave_Controle_Doc from Bordero B
    inner join Bordero C
    on b.id_Bordero_seq = c.id_Bordero 
    where b.id_bordero = 50


    Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008

    • Marcado como Resposta Giovani Cr sexta-feira, 13 de dezembro de 2013 17:41
    segunda-feira, 9 de dezembro de 2013 11:45
    Moderador
  • Boa tarde,

    neibala, experimente mais ou menos dessa forma:

    with CTE_Rec as
    (
        select 
            id_Bordero as id_Bordero_Filtro,
            id_Bordero,
            id_Bordero_Seq as id_Bordero_Pai,
            id_Chave_Controle_Doc
        from Tabela
        where id_Bordero = 50
        
        union all
        
        select
            c.id_Bordero_Filtro,
            t.id_Bordero,
            t.id_Bordero_Seq,
            t.id_Chave_Controle_Doc     
        from CTE_Rec as c
        inner join Tabela as t
            on t.id_Bordero = c.id_Bordero_Pai
    )
    
    select top 1
        * 
    from CTE_Rec
    order by id_Bordero

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Giovani Cr sexta-feira, 13 de dezembro de 2013 17:41
    segunda-feira, 9 de dezembro de 2013 18:07
  • Experimente dessa forma:

    with CTE_Rec as
    (
        select 
            id_Bordero as id_Bordero_Filtro,
            id_Bordero,
            id_Bordero_Anterior,
            id_Chave_Controle_Doc
        from Tabela
        where id_Bordero = 50
        
        union all
        
        select
            c.id_Bordero_Filtro,
            t.id_Bordero,
            t.id_Bordero_Anterior,
            t.id_Chave_Controle_Doc     
        from CTE_Rec as c
        inner join Tabela as t
            on t.id_Bordero = c.id_Bordero_Anterior
    )
    
    select 
        * 
    from CTE_Rec
    where id_Bordero_Anterior = 0

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Giovani Cr sexta-feira, 13 de dezembro de 2013 17:42
    terça-feira, 10 de dezembro de 2013 12:39
  • Você poderia explicar melhor o que significa não "representar a verdade" pois a query vai pegar exatamente o que está em id_Bordero_Seq, independentemente se for identity, e fazer a relação com id_Bordero e relacionar o Bordero Pai e o Bordero Filho...


    Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008

    • Marcado como Resposta Giovani Cr sexta-feira, 13 de dezembro de 2013 17:42
    terça-feira, 10 de dezembro de 2013 13:20
    Moderador
  • Neibala,

    Rastreabilidade de dados é algo de muito complexidade em diversos projetos que eu já trabalhei, mesmo os dados não tendo o relacionamento físico mas sim o lógico o importante é que exista algum vínculo.

    Nesta sua necessidade, para realizar o rastreamento vai depender em muito de como você distribuiu os dados, em particularmente em diversos projetos, trabalhei com Stored Procedures fazendo a busca dos dados de acordo com um parâmetro chave para encontrar os relacionamentos e seus dependentes.

    Se quiser tenhos exemplos de como fiz isso!!!!


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    • Marcado como Resposta Giovani Cr sexta-feira, 13 de dezembro de 2013 17:42
    sexta-feira, 13 de dezembro de 2013 14:39

Todas as Respostas

  • Deleted
    • Marcado como Resposta Giovani Cr sexta-feira, 13 de dezembro de 2013 17:41
    sábado, 7 de dezembro de 2013 00:09
  • José Diz

        No caso do autorelacionamento, você poderia me dar pelo mesmo uma ideia de como seria ?

    sábado, 7 de dezembro de 2013 11:40
  • Olá,

        Eu gosto da idéia de utilizar autorrelacionamento. Veja se o exemplo abaixo te ajuda.

    select c.id_Chave_Controle_Doc from Bordero B
    inner join Bordero C
    on b.id_Bordero_seq = c.id_Bordero 
    where b.id_bordero = 50


    Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008

    • Marcado como Resposta Giovani Cr sexta-feira, 13 de dezembro de 2013 17:41
    segunda-feira, 9 de dezembro de 2013 11:45
    Moderador
  • Roberto

       Infelizmente a sua ideia, não é a realidade, pois no exemplo citado, por coincidência, ficou igual a sequência ao numero do bordero, mais em outros casos vai ser diferente, você teria outra ideia para me passar ?

    segunda-feira, 9 de dezembro de 2013 15:58
  • Boa tarde,

    neibala, experimente mais ou menos dessa forma:

    with CTE_Rec as
    (
        select 
            id_Bordero as id_Bordero_Filtro,
            id_Bordero,
            id_Bordero_Seq as id_Bordero_Pai,
            id_Chave_Controle_Doc
        from Tabela
        where id_Bordero = 50
        
        union all
        
        select
            c.id_Bordero_Filtro,
            t.id_Bordero,
            t.id_Bordero_Seq,
            t.id_Chave_Controle_Doc     
        from CTE_Rec as c
        inner join Tabela as t
            on t.id_Bordero = c.id_Bordero_Pai
    )
    
    select top 1
        * 
    from CTE_Rec
    order by id_Bordero

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Giovani Cr sexta-feira, 13 de dezembro de 2013 17:41
    segunda-feira, 9 de dezembro de 2013 18:07
  • Não entendi... Você não sabe qual é o id_bordero que quer consultar? Basta vc tirar a cláusula where e terá todos os borderos com a informação.

    Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008

    segunda-feira, 9 de dezembro de 2013 23:42
    Moderador
  • Roberto

        Acredito que não estou sendo tão claro para você, o id_bordero eu sei, e até pode variar, o problema está relacionado ao script que você me enviou, que infelizmente não é o que representa a verdade, pois o id_Bordero_seq, é uma sequencia do banco, agora caso tenha outra ideia ela será bem vinda.

    Grato de sua atenção

    • Marcado como Resposta Giovani Cr sexta-feira, 13 de dezembro de 2013 17:41
    • Não Marcado como Resposta Giovani Cr sexta-feira, 13 de dezembro de 2013 17:42
    terça-feira, 10 de dezembro de 2013 00:14
  • Experimente dessa forma:

    with CTE_Rec as
    (
        select 
            id_Bordero as id_Bordero_Filtro,
            id_Bordero,
            id_Bordero_Anterior,
            id_Chave_Controle_Doc
        from Tabela
        where id_Bordero = 50
        
        union all
        
        select
            c.id_Bordero_Filtro,
            t.id_Bordero,
            t.id_Bordero_Anterior,
            t.id_Chave_Controle_Doc     
        from CTE_Rec as c
        inner join Tabela as t
            on t.id_Bordero = c.id_Bordero_Anterior
    )
    
    select 
        * 
    from CTE_Rec
    where id_Bordero_Anterior = 0

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Giovani Cr sexta-feira, 13 de dezembro de 2013 17:42
    terça-feira, 10 de dezembro de 2013 12:39
  • Você poderia explicar melhor o que significa não "representar a verdade" pois a query vai pegar exatamente o que está em id_Bordero_Seq, independentemente se for identity, e fazer a relação com id_Bordero e relacionar o Bordero Pai e o Bordero Filho...


    Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008

    • Marcado como Resposta Giovani Cr sexta-feira, 13 de dezembro de 2013 17:42
    terça-feira, 10 de dezembro de 2013 13:20
    Moderador
  • Neibala,

    Rastreabilidade de dados é algo de muito complexidade em diversos projetos que eu já trabalhei, mesmo os dados não tendo o relacionamento físico mas sim o lógico o importante é que exista algum vínculo.

    Nesta sua necessidade, para realizar o rastreamento vai depender em muito de como você distribuiu os dados, em particularmente em diversos projetos, trabalhei com Stored Procedures fazendo a busca dos dados de acordo com um parâmetro chave para encontrar os relacionamentos e seus dependentes.

    Se quiser tenhos exemplos de como fiz isso!!!!


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    • Marcado como Resposta Giovani Cr sexta-feira, 13 de dezembro de 2013 17:42
    sexta-feira, 13 de dezembro de 2013 14:39
  • Junior

        Pode me enviar, pois acredito que me servira como base e até mesmo como conhecimento.

    sábado, 14 de dezembro de 2013 19:32