Pular para o conteúdo
Visualizando 3 posts - 1 até 3 (de 3 do total)
  • Autor
    Posts
  • #84050
    airoosp
    Participante

      Boa tarde,

      Será que alguém já passou por uma situação assim:

      Executando uma query o resultado é:

      Location nível children
      100 1 y
      101 2 y
      102 3 y
      103 4 y
      104 5 n
      105 5 n
      106 4 y
      107 5 y
      108 6 n
      109 6 n

      O que eu preciso fazer é acumular os valores conforme o nível sendo:

      107 acumular os totais do 108 e 109
      106 acumular o total do 107
      102 acumular os totais do 103 e 106
      101 acumular o total do 102
      100 acumular o total do 101

      Os totais serão pesquisados em outra tabela, esta representação é a hierarquia que devo respeitar. Estou pensando em utilizar um CURSOR mas não sei como fazer para ler a query de abaixo para cima.

      Se você tiver alguma idéia ou sugestão agradeço.

      Obrigado.

      Airton.

      #84051
      Avatar photoLeonardo Litz
      Participante

        Cara, voce pode criar um array, onde cada posicao represente o um total que vc precisa. Faca um loop nesta query principal, dentro do loop crie ifs para tratar qual a soma que deverá receber. Como as quantidades estão em outra tabela, voce faz um select na outra tabela e inseri na posicao do array respctivo, desta forma não lhe irá importar a ordem que vai vir no select principal.

        Vlw? Leonardo Litz

        #84062
        Ishii
        Participante

          Olá,

          Se entendi direito você pode usar o ROLLUP

          Location nível children Valor da outra coluna
          100 1 y 100
          101 2 y 50
          102 3 y 25
          103 4 y 100
          104 5 n 125
          105 5 n 150
          106 4 y 100
          107 5 y 50
          108 6 n 25
          109 6 n 50

          Faça:

          select sum(Valor da outra coluna) from tabela
          group by rollup (nivel)

          Veja se isso resolve….

          []s Ishii

        Visualizando 3 posts - 1 até 3 (de 3 do total)
        • Você deve fazer login para responder a este tópico.