- Este tópico contém 6 respostas, 3 vozes e foi atualizado pela última vez 14 anos, 7 meses atrás por
ericclauber.
-
AutorPosts
-
1 de junho de 2011 às 4:51 am #99441
ericclauber
ParticipanteOlá 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…
1 de junho de 2011 às 7:00 am #99443rman
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 ?
1 de junho de 2011 às 3:51 pm #99446ericclauber
Participanterman… 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!
1 de junho de 2011 às 4:21 pm #99449burga
ParticipanteVocê 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)1 de junho de 2011 às 4:33 pm #99452ericclauber
Participantegalera 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!!!
1 de junho de 2011 às 4:35 pm #99454burga
ParticipanteSó 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…
21 de julho de 2011 às 10:22 pm #100106ericclauber
Participanteburga 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.
-
AutorPosts
- Você deve fazer login para responder a este tópico.