none
Hierarquia de pedido, pedido pai e pedido filho. RRS feed

  • Pergunta

  • Pessoal, estou precisando fazer uma query, onde eu tenho uma tabela de pedido que tem o idPedido e o IdPedidoPai

    Preciso fazer um query onde passo o idPedido e ele me traz o primeiro idPedidoPai, ou seja ele vai no topo da hierar quia e me traz o pai que gerou todos os pedido da hierarquia de pedidos.

     

    por exemplo:

    O idpedido = 10 gerou o idPedido 11 que gerou o idPedido 12 que gerou o idPedido 13 que gerou o IdPedido 14 etc.

     

    se eu passar o idPedido 15 por exemplo ele tem que me trazer o idPedido 10

     

    Como faço esse esquema de hierarquia?


    Tarcísio Corte tarcisiocorte@gmail.com
    quinta-feira, 14 de abril de 2011 19:56

Todas as Respostas

  • Bom Dia,

    Informe o SQL Server utilizado, pois, os recursos podem variar de versão para versão.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.wordpress.com


    Classifique as respostas. O seu feedback é imprescindível
    sexta-feira, 15 de abril de 2011 12:07
  • Sql Server 2005

    Tarcísio Corte tarcisiocorte@gmail.com
    sexta-feira, 15 de abril de 2011 15:04
  • Tarcisio,

     

    Não entendi muito bem sua duvida, pode postar a estrutura de suas tabelas com umas 3 linhas de dados para eu poder te ajudar?


    ------------------------------------------------------------- Oracle OCA11g
    sexta-feira, 15 de abril de 2011 15:15
    Moderador
  • Boa Noite,

    Segue uma implementação com o uso das CTEs.

    CREATE TABLE #IDS (IDFilho INT, IDPai INT)
    -- Primeira dependência (1 -> 2 -> 3 -> 4 -> 6)
    INSERT INTO #IDS VALUES (1,NULL)
    INSERT INTO #IDS VALUES (2,1)
    INSERT INTO #IDS VALUES (3,2)
    INSERT INTO #IDS VALUES (4,3)
    INSERT INTO #IDS VALUES (6,5)
    -- Segunda dependência (10 -> 11 -> 13 -> 17)
    INSERT INTO #IDS VALUES (10,NULL)
    INSERT INTO #IDS VALUES (11,10)
    INSERT INTO #IDS VALUES (13,11)
    INSERT INTO #IDS VALUES (17,13)
    ;WITH Res (IDFilho, IDPai, IDAncestral)
    As (
    SELECT IDFilho, IDPai, CASE WHEN IDPai IS NULL THEN IDFilho ELSE IDPai END FROM #IDS
    WHERE IDPai IS NULL
    UNION ALL
    SELECT #IDS.IDFilho, #IDS.IDPai, Res.IDAncestral FROM #IDS
    INNER JOIN Res ON #IDS.IDPai = Res.IDFilho)
    SELECT * FROM Res
    

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.wordpress.com


    Classifique as respostas. O seu feedback é imprescindível
    sábado, 16 de abril de 2011 04:19
  • Boa noite, segue outro exemplo.

    http://social.msdn.microsoft.com/Forums/pt-BR/transactsqlpt/thread/51af3757-40e4-4763-823c-e7f58202ec68


    Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino
    segunda-feira, 18 de abril de 2011 06:03
  • Gustova, é basicamente isso que eu preciso.

     

    Mas como eu faço para fazer uma query que eu passe como parametro 17, por exemplo e ela me traga o primeiro pai da hierarquia, ou seja o ID que gerou outro id até chegar no 17, no caso do exemplo abaixo é o 9?

    9 Gerou o filho 10, que gerou o filho 11 que gerou o filho 13 que gerou o filho 17.

    idFilho  idPai

    1           NULL     
    10          9        
    11          10       
    13          11       
    17          13       
    2           1        
    3           2        
    4           3  


    Tarcísio Corte tarcisiocorte@gmail.com
    quinta-feira, 28 de abril de 2011 18:43
  • Boa Noite,

    Até posso pensar em algo, mas me parece que seus dados tem uma particularidade. Se o ID10 é filho do ID9 onde está o registro do ID9 ? Não teríamos que ter um ID9 com um IPPai nulo a exemplo do ID1 ?

    Se tivermos esse registro então conseguiríamos utilizar minha primeira sugestão.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.wordpress.com


    Classifique as respostas. O seu feedback é imprescindível
    quinta-feira, 28 de abril de 2011 22:25