Update

22/11/2006 - 02:48 por Francisco | Informe spam
Hola, no he podido resolver una actualización y por eso solicito su
ayuda.

El escenario es el siguiente:

Tengo una tabla de "Cuentas" con el siguiente formato:

CTA, ..., ORIGEN

donde CTA es la llave de la cuenta y ORIGEN es la definición de las
cuentas que componen los movimientos.

Este atributo de ORIGEN puede ser nulo, lo cual significa que el origen
de movimientos esta dado por todas las cuentas CTA de movimientos, si
es diferente de nulo, el origen debe ser dado por los movimientos cuyas
cuentas esten contenidos dentro de este atributo.

Por ejemplo, la CTA = 120 tiene como ORIGEN = 530, 531, 532, 533; por
lo que debo obtener la suma de los movimientos cuyas cuentas esten
contenidas en el rango 530 al 533 y cargarlas a la cuenta 120.

Obviamente, esto requiero hacerlo de manera dinamica y para ello he
intentado la siguiente actualización sin resultados:

Update #Balance Set #Balance.Cantidad = #Balance.Cantidad + Cast (
IsNull ( M.movCantidad, 0 ) As Decimal ( 10, 2 ) ) From #Balance Inner
Join TE003_Movimientos As M On M.ctaNumero In ( #Balance.Origen ) Where
RTrim ( #Balance.Origen ) <> ''

La tabla #Balance fue creada previamente con todas las cuentas
necesarias.

Les agradecere cualquier comentario que me ayude a resolver esta parte.

Preguntas similare

Leer las respuestas

#1 Javier Loria
22/11/2006 - 13:47 | Informe spam
Hola Francisco:
Lo mejor seria que esta columna ORIGEN fuera normalizada y tuvieras una
tabla asi:
Cta Origen
120 530
120 531
120 533
Por otra parte un problema que tienes es que el UPDATE solo funciona una
sola vez por fila actualizada, por lo que tienes que agrupar los datos antes
de la actualizacion:
=UPDATE #Balance
SET #Balance.Cantidad = #Balance.Cantidad + G.MovCantidad
JOIN #Balance
INNER JOIN (
SELECT B.Cta, SUM(MovCantidad) AS MovCantidad
FROM TE003_Movimientos AS M
INNER JOIN #Balance AS B
ON B.Origen LIKE M.ctaNumero+',%'
OR B.Origen LIKE '%, '+M.ctaNumero+', %'
OR B.Origen LIKE '%, '+M.ctaNumero
GROUP BY B.Cta) AS G
ON #Balance.Cta=G.Cta
= Otra posiblidad es hacer una funcion que "normalice" la columna origen y
luege hacer un join.
Saludos,

Javier Loria
Costa Rica-MVP
Solid Quality Learning

"Francisco" wrote in message
news:
Hola, no he podido resolver una actualización y por eso solicito su
ayuda.

El escenario es el siguiente:

Tengo una tabla de "Cuentas" con el siguiente formato:

CTA, ..., ORIGEN

donde CTA es la llave de la cuenta y ORIGEN es la definición de las
cuentas que componen los movimientos.

Este atributo de ORIGEN puede ser nulo, lo cual significa que el origen
de movimientos esta dado por todas las cuentas CTA de movimientos, si
es diferente de nulo, el origen debe ser dado por los movimientos cuyas
cuentas esten contenidos dentro de este atributo.

Por ejemplo, la CTA = 120 tiene como ORIGEN = 530, 531, 532, 533; por
lo que debo obtener la suma de los movimientos cuyas cuentas esten
contenidas en el rango 530 al 533 y cargarlas a la cuenta 120.

Obviamente, esto requiero hacerlo de manera dinamica y para ello he
intentado la siguiente actualización sin resultados:

Update #Balance Set #Balance.Cantidad = #Balance.Cantidad + Cast (
IsNull ( M.movCantidad, 0 ) As Decimal ( 10, 2 ) ) From #Balance Inner
Join TE003_Movimientos As M On M.ctaNumero In ( #Balance.Origen ) Where
RTrim ( #Balance.Origen ) <> ''

La tabla #Balance fue creada previamente con todas las cuentas
necesarias.

Les agradecere cualquier comentario que me ayude a resolver esta parte.
Respuesta Responder a este mensaje
#2 Francisco
22/11/2006 - 18:44 | Informe spam
Te agradezco tu tiempo y sugerencia, la voy a implementar.

Gracias
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida