Pular para o conteúdo
  • Este tópico contém 6 respostas, 3 vozes e foi atualizado pela última vez 13 anos, 5 meses atrás por ericclauber.
Visualizando 7 posts - 1 até 7 (de 7 do total)
  • Autor
    Posts
  • #99441
    ericclauber
    Participante

      Olá galera blz…

      Estou necessitando de fazer um UPDATE em mais de 1 linha.

      Ex.:

      update tabela1 set tabela1.valortotal = (select sum(qt*vlunit) from tabela2)

      Para cada nota em tabela1… fazer a soma da tabela2 e realizar o update em tabela1.valortotal.

      Por regra no Update não é possivel. A alguma for de realizar este UPDATE, sem PL/SQL.

      Grato pela ajuda…

      #99443
      rman
      Participante


        UPDATE tabelaPai p
        SET p.ValorTotal = (
        SELECT SUM(f.Quantidade*f.Valor)
        FROM tabelaFilha f
        WHERE f.CodigoPai = p.CodigoPai
        )
        WHERE p.ValorTotal IS NULL;

        Será que isso resolve ?

        #99446
        ericclauber
        Participante

          rman… a ideia seira + ou – isso, só que no select traz mais de uma linha(valor), entao da erro. Como se pegasse varios valores do select e atualizasse varios valores em cada linda do update. Pois nescessito que atualize nota a nota

          na pratica seria assim

          UPDATE pcnfsaid
          SET vltotal = (SELECT SUM (punitcont * qt)
          FROM pcmov
          GROUP BY numnota) —
          estou agrupando, e me trará o total dos itens de cada nota da tabela PCMOV, e atualizará PCNFSAID.vltotal.

          Grato!

          #99449
          burga
          Participante

            Você deve arrumar algum jeito de “amarrar” os dois comandos (UPDATE e SELECT). As tabelas devem possuir alguma coluna em comum (nesse caso, pelo que me parece é o numnota). Entao você faria assim:

            UPDATE pcnfsaid pcn
            SET vltotal = (SELECT SUM (pcm.punitcont * pcm.qt)
            FROM pcmov pcm.pcm
            WHERE pcm.numnota = pcn.numnota)

            #99452
            ericclauber
            Participante

              galera deu certo…

              ja tinha tentado de forma pararecida com uma pequena diferença. No select eu estava colocando tambem na clausula FROM a tabela a ser atualizada(PCNFSAID). quando tirei deu certo.

              Deu certo assim.

              UPDATE pcnfsaid
              SET vltotal =
              (SELECT SUM (punitcont * qt)
              FROM pcmov —————- SEM A TABELA A SER ATUALIZADA (PCNFSAID)
              WHERE pcmov.numnota = pcnfsaid.numnota
              AND dtmov BETWEEN ’08/12/2009′ AND ’08/12/2009′
              GROUP BY numnota)
              WHERE dtsaida BETWEEN ’08/12/2009′ AND ’08/12/2009′

              Grato RMAN e BURGA… vlllww!!!

              #99454
              burga
              Participante

                Só uma coisa… como você já está filtrando no WHERE as numnotas e no retorno do select só volta a somatória, você pode tirar o GROUP BY…

                #100106
                ericclauber
                Participante

                  burga tenho que manter o group by, pois a tabela PCMOV traz mais de uma linha de itens e estou totalizando esse itens por nota.

                  Vlw.

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