 |
ActiveDelphi .: O site do programador Delphi! :.
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
Victor_Pinguim Novato

Registrado: Segunda-Feira, 3 de Mai de 2010 Mensagens: 1
|
Enviada: Seg Mai 03, 2010 2:58 pm Assunto: Ajuda com Update |
|
|
OLÁ GALERA!!! BLZ??
Estou com um problema em relação à sintaxe de um update.
No banco de Dados que estou trabalhando (utilizo o Apollo) existe a tabela B_MOV. Entre seus campos estão:
N_DOCTO --- STRING [Chave Primária]
ORDEM --- STRING [este campo é utilizado como integer, portanto quando for chamado será utilizado o CAST para convertê-lo]
DATA --- DATE
SALDO --- NUMERIC
VALOR --- NUMERIC
Antes de falar do update em si, é preciso entender o funcionamento dos campos DATA e ORDEM:
O campo DATA com o mesmo registro repete-se indefinidamente (ou seja, pode – e provavelmente haverá – datas iguais). ORDEM é configurado a partir do campo DATA; assim sendo, caso existam dez datas iguais ORDEM terá valores variando de 1 a 10 (para esta data). Caso o número de datas seja 1, ORDEM terá apenas o valor 1 (para esta data). Portanto os campos DATA + ORDEM formam registros sem repetição (semelhante a uma PK).
No update, o SALDO deve ser calculado utilizando a seguinte expressão:
SALDO = SALDO {dia anterior*} – VALOR {dia de hoje}
*Saldo anterior deve obedecer a seguinte condição:
Se max(ORDEM) – 1 = 0 então
SALDO = SALDO onde DATA = (DATA – 1) e Max(ORDEM) \\\ sendo este ordem o máximo do dia anterior
Senão
SALDO = SALDO onde ORDEM = (ORDEM – 1)
E é esse carinha que eu não consigo fazer... Já tentei de várias formas, busquei ajuda na net e falei com colegas de trabalho, mas ninguém soube me dar uma resposta
É um código complexo. Pelo o que testei será necessário utilizar a condição IF no where e select dentro do update (update b_mov set [campo] = (SELECT...)).
Se alguém souber de algo por favor me dá uma mãozinha.
Vlw povo! Abraços!
 |
|
Voltar ao Topo |
|
 |
BrunoMoreyra Colaborador

Registrado: Quinta-Feira, 26 de Novembro de 2009 Mensagens: 1398 Localização: Goiânia - GO / Brasília - DF
|
Enviada: Ter Mai 04, 2010 6:40 pm Assunto: Re: Ajuda com Update |
|
|
Boa noite,
Creio que fique mais ou menos assim.
Buscando um registro, e caso não retorne nada (NULO), preencherá com 0 (zero).
Código: |
UPDATE B_MOV B1 SET SALDO = NVL(SELECT SALDO
FROM B_MOV B2
WHERE B1.DATA = B2.DATA
AND B1.ORDEM = (B2.ORDEM - 1),0) - VALOR
WHERE DATA = :DATA
AND ORDEM = :ORDEM
|
Victor_Pinguim escreveu: | OLÁ GALERA!!! BLZ??
Estou com um problema em relação à sintaxe de um update.
No banco de Dados que estou trabalhando (utilizo o Apollo) existe a tabela B_MOV. Entre seus campos estão:
N_DOCTO --- STRING [Chave Primária]
ORDEM --- STRING [este campo é utilizado como integer, portanto quando for chamado será utilizado o CAST para convertê-lo]
DATA --- DATE
SALDO --- NUMERIC
VALOR --- NUMERIC
Antes de falar do update em si, é preciso entender o funcionamento dos campos DATA e ORDEM:
O campo DATA com o mesmo registro repete-se indefinidamente (ou seja, pode – e provavelmente haverá – datas iguais). ORDEM é configurado a partir do campo DATA; assim sendo, caso existam dez datas iguais ORDEM terá valores variando de 1 a 10 (para esta data). Caso o número de datas seja 1, ORDEM terá apenas o valor 1 (para esta data). Portanto os campos DATA + ORDEM formam registros sem repetição (semelhante a uma PK).
No update, o SALDO deve ser calculado utilizando a seguinte expressão:
SALDO = SALDO {dia anterior*} – VALOR {dia de hoje}
*Saldo anterior deve obedecer a seguinte condição:
Se max(ORDEM) – 1 = 0 então
SALDO = SALDO onde DATA = (DATA – 1) e Max(ORDEM) \\\ sendo este ordem o máximo do dia anterior
Senão
SALDO = SALDO onde ORDEM = (ORDEM – 1)
E é esse carinha que eu não consigo fazer... Já tentei de várias formas, busquei ajuda na net e falei com colegas de trabalho, mas ninguém soube me dar uma resposta
É um código complexo. Pelo o que testei será necessário utilizar a condição IF no where e select dentro do update (update b_mov set [campo] = (SELECT...)).
Se alguém souber de algo por favor me dá uma mãozinha.
Vlw povo! Abraços!
 |
_________________ Atencisamente,
Bruno Moreira Batista.
http://www.kawek.com.br/BrunoBatista
Skype: Bruno_Batysta |
|
Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|