UPDATE COM O RESULTADO DE UMA CONSULTA
BOM DIA GALERA,
PRECISO FAZER UM UPDATE USANDO O RESULTADO DE UMA CONSULTA (SELECT COM VARIOS REGISTROS) USANDO TAMBEM A INSTRUÇÃO WHERE.. ALGUEM SABE COMO FAZER?
EU SEI QUE SINTAXE PARA ESTA SITUAÇÃO é A SEGUINTE:
UPDATE NOME_TABELA
SET (CAMPO1, CAMPO2, CAMPO3) = (SELECT V.VENDA, V.QTDE, V.LUCRO
FROM VENDA V
WHERE V.LOJA = 1)
MAS COMO O RESULTA ME TRARàMAIS DE UM REGISTRO EU PRECISO USAR A INSTRUÇÃO WHERE...ALGUEM JàFEZ ISTO ALGUMA VEZ?
VALEU
PRECISO FAZER UM UPDATE USANDO O RESULTADO DE UMA CONSULTA (SELECT COM VARIOS REGISTROS) USANDO TAMBEM A INSTRUÇÃO WHERE.. ALGUEM SABE COMO FAZER?
EU SEI QUE SINTAXE PARA ESTA SITUAÇÃO é A SEGUINTE:
UPDATE NOME_TABELA
SET (CAMPO1, CAMPO2, CAMPO3) = (SELECT V.VENDA, V.QTDE, V.LUCRO
FROM VENDA V
WHERE V.LOJA = 1)
MAS COMO O RESULTA ME TRARàMAIS DE UM REGISTRO EU PRECISO USAR A INSTRUÇÃO WHERE...ALGUEM JàFEZ ISTO ALGUMA VEZ?
VALEU
Opa!!!
Tente assim
UPDATE NOME_TABELA (CAMPO1, CAMPO2, CAMPO3) SELECT V.VENDA, V.QTDE, V.LUCRO FROM VENDA V WHERE V.LOJA = 1
Tente assim
UPDATE NOME_TABELA (CAMPO1, CAMPO2, CAMPO3) SELECT V.VENDA, V.QTDE, V.LUCRO FROM VENDA V WHERE V.LOJA = 1
UPDATE NOME_TABELA
SET CAMPO1=(SELECT V.VENDA, V.QTDE, V.LUCRO
FROM VENDA V
WHERE V.LOJA = 1),
SET CAMPO2=(SELECT V.VENDA, V.QTDE, V.LUCRO
FROM VENDA V
WHERE V.LOJA = 1),
SET CAMPO3=(SELECT V.VENDA, V.QTDE, V.LUCRO
FROM VENDA V
WHERE V.LOJA = 1)
WHERE CONDICAO
'SO QUE é O SEGUINTE, SE SEU SELECT RETORNA MAIS DE UMA LINHA QUE FAZER UM CURSOR
SET CAMPO1=(SELECT V.VENDA, V.QTDE, V.LUCRO
FROM VENDA V
WHERE V.LOJA = 1),
SET CAMPO2=(SELECT V.VENDA, V.QTDE, V.LUCRO
FROM VENDA V
WHERE V.LOJA = 1),
SET CAMPO3=(SELECT V.VENDA, V.QTDE, V.LUCRO
FROM VENDA V
WHERE V.LOJA = 1)
WHERE CONDICAO
'SO QUE é O SEGUINTE, SE SEU SELECT RETORNA MAIS DE UMA LINHA QUE FAZER UM CURSOR
Cleverton não pode ser assim, porque cada resultado deverá ser gravado num registro especifico.
Este Update funciona perfeitamente assim...veja pq:
update ricoy.venda_movel v
set (v.vm_venda, v.vm_qtde, v.vm_lucro) =
(select sum(v.venda) Venda, sum(v.Qtde) Qtde,sum(v.lucro) Lucro
from ricoy.venda_movel v,
(select vm.loja_key,
vm.subgrupo_key,
vm.data_movimento,
vm.venda_movel_key
from ricoy.venda_movel vm
where vm.venda_movel_key =2493704 'chave primaria
order by vm.loja_key, vm.data_movimento) v2
where v.loja_key = v2.loja_key
and v.subgrupo_key = v2.subgrupo_key
and v.data_movimento between v2.data_movimento - 28 and v2.data_movimento
group by v2.venda_movel_key)
where v.venda_movel_key = 2493704 'chave primaria
Repare que eu estou identificando aonde deve ser gravado este registro, ou seja, numa linha especifica. Agora suponha que na subconsulta ao enves de resultar somente uma linha resultasse varias... Na condição Where do UPDATE, eu precisaria informar onde será gravado cada resultado. Como faço isso?
Grato
Este Update funciona perfeitamente assim...veja pq:
update ricoy.venda_movel v
set (v.vm_venda, v.vm_qtde, v.vm_lucro) =
(select sum(v.venda) Venda, sum(v.Qtde) Qtde,sum(v.lucro) Lucro
from ricoy.venda_movel v,
(select vm.loja_key,
vm.subgrupo_key,
vm.data_movimento,
vm.venda_movel_key
from ricoy.venda_movel vm
where vm.venda_movel_key =2493704 'chave primaria
order by vm.loja_key, vm.data_movimento) v2
where v.loja_key = v2.loja_key
and v.subgrupo_key = v2.subgrupo_key
and v.data_movimento between v2.data_movimento - 28 and v2.data_movimento
group by v2.venda_movel_key)
where v.venda_movel_key = 2493704 'chave primaria
Repare que eu estou identificando aonde deve ser gravado este registro, ou seja, numa linha especifica. Agora suponha que na subconsulta ao enves de resultar somente uma linha resultasse varias... Na condição Where do UPDATE, eu precisaria informar onde será gravado cada resultado. Como faço isso?
Grato
Alexandre,
Não dá para gravar tres informações no mesmo campo como vc citou. E mesmo assim eu ainda teria que fazer a mesma consulta mais de uma vez, perderia tempo.
Veja o que escrevi acima...o script que descrevi esta funcionando desta forma, só preciso adapta-lo para não precisar usar cursor..
Valeu
Não dá para gravar tres informações no mesmo campo como vc citou. E mesmo assim eu ainda teria que fazer a mesma consulta mais de uma vez, perderia tempo.
Veja o que escrevi acima...o script que descrevi esta funcionando desta forma, só preciso adapta-lo para não precisar usar cursor..
Valeu
ismael, acho que sem cursor vc nao vai conseguir, é por isso que temos os cursores ok.
Tópico encerrado , respostas não são mais permitidas