Sergio,

En Sql... ya sea SQLServer o MySQL podes usar case... como mencionaste
MySql te paso dos link de ejemplo.

*
http://stackoverflow.com/questions/4216605/mysql-case-in-update-statement-with-replace
*

http://stackoverflow.com/questions/6734231/mysql-update-case-help


Pero si bien esto te puede solucionar el inconveniente, la realidad es que
cuanto mas complejo sea ek query mas va a tardar.

Lo que te recomiendo ademas es que le agregues indices sobre los campos que
vas a usar en el case, de esta forma el motor no tiene que estar creando
los índices para hacer la actualización.

Saludos,

Pancho
Cordoba



El 23 de noviembre de 2012 01:40, Alejandro Paciotti Iacchelli <
[email protected]> escribió:

> Porque no traes en un cursor todos los movimientos mas los campos que
> necesites en cero. Y luego con un procedimiento los calculas en el cursor
> de FOX, y si querés, luego podés recorrer ese cursor y volver a grabar en
> MYSQL.
>
> Sería: SELECT CODPROV, DEBITO, CREDITO, 0.00 AS SALDOANTERIOR , 0.00 AS
> TOTDEB , 0.00 AS TOTCRE , 0.00 AS SALDOACTUAL FROM TablaMovimientos  ORDER
> BY CODPROV
>
> (No me quedó claro si la tabla de movimientos la traes de DBF)
>
> Y luego, en este cursor lo tendrías que recorrer e ir calculando el
> SALDOANTERIOR EL TOTDEB, TOTCRE y el SALDOACTUAL.
>
> Saludos.
>
>
>
>
>
> El 23 de noviembre de 2012 00:12, Sergio D.Castellari <
> [email protected]> escribió:
>
> **
>> **
>> Hola gente,
>>
>> Nosé si el titulo del Asunto es exacto, pero la intención es ver si
>> alguien con conocimientos en MySQL tiene alguna formula para resolver el
>> siguiente problema:
>> Tengo una tabla de Proveedores, donde tiene un campo que indica el Saldo
>> Actual del mismo y otra tabla que va registrando los movimientos de los
>> mismos, con un formato de registro parecido a este:
>> CODPROV, DEBITO, CREDITO, SALDOANTERIOR , TOTDEB , TOTCRE , SALDOACTUAL entre
>> otros campos...
>>
>> La cuestion es la siguiente (es una migracion de un programa
>> clipper/DBFs) que en un procedimiento, REVISO toda la tabla de movimientos
>> y voy ACTUALIZANDO los campos SALDOANTERIOR , TOTDEB , TOTCRE , SALDOACTUAL
>> registro a registro, por cada Proveedor segun las operaciones de Debitos y
>> Creditos.
>> Al final del procedimiento, me queda en la tabla de Proveedores los
>> Saldos Actuales, y en la tabla de movimientos todos los registros AJUSTADOS
>> registro a registro con dichos campos como muestro a continuación...
>>
>> DEBITO    CREDITO    SALDOANTERIOR    TOTDEB    TOTCRE    SALDOACTUAL
>> 0.00      1264.45    0.00             0.00      1264.45   -1264.45
>> 1264.45   0.00       -1264.45         1264.45   0.00      0.00
>> 0.00      641.42     0.00             0.00      641.42    -641.42
>> 3.40      0.00       -641.42          3.40      0.00      -638.02
>> 638.02    0.00       -638.02          638.02    0.00      0.00
>>
>> Los ultimos 4 campos son los que se ajustan registro a registro según los
>> valores de los campos Debito y Credito.
>>
>> Actualmente tengo hecho un procedimiento que realiza este trabajo
>> correctamente...peeeero...tarda muuucho tiempo, creo que principalmente por
>> que hago un query por cada 2 registros, de tal forma que si la tabla tiene
>> 60000 registros, hago 30000 querys!!!!
>>
>>     If cTipoComp="FA" .or. cTipoComp="CI"
>>      cQuery:="Update MOVIPROV Set TOTCRE="+AllTrim(cCredito)+","
>>      nSalAct:=nSalAnt - Val(cCredito)
>>      nSalAnt:=nSalAct
>>      cQuery:=cQuery+"SALACT="+AllTrim(Str(nSalAct,12,2))+" Where
>> IDMOVIPROV="+cID
>>     ElseIf cTipoComp="RE" .or. cTipoComp="NC"
>>      cQuery:="Update MOVIPROV Set TOTDEB="+AllTrim(cDebito)+","
>>       nSalAct:=nSalAnt + Val(cDebito)
>>       nSalAnt:=nSalAct
>>      cQuery:=cQuery+"SALACT="+AllTrim(Str(nSalAct,12,2))+" Where
>> IDMOVIPROV="+cID
>>     ElseIf cTipoComp="AP" .and. nSaldo <> 0   //Comprobante 'Anticipo' y
>> todavia NO aplicado
>>      cQuery:="Update MOVIPROV Set TOTDEB="+AllTrim(cDebito)+","
>>       nSalAct:= nSalAnt + Val(cDebito)
>>       nSalAnt:=nSalAct
>>      cQuery:=cQuery+"SALACT="+AllTrim(Str(nSalAct,12,2))+" Where
>> IDMOVIPROV="+cID
>> *¿¿¿ Existe algun metodo de MySQL, para que haga este proceso en un solo
>> query o eventualmente un query por cada proveedor ???*
>> *¿¿¿ Existe alguna manera de poder concatenar multiples Updates, en un
>> solo query ???*
>> **
>> Desde ya muchas gracias si alguien puede aportarme algo de
>> luz...bah...una lampara gigante!!!
>>
>> Saludos,
>> Sergio Castellari
>> **
>>
>
>
>
> --
> [email protected]
>

Responder a