Ayuda ! Instrucción de actualización

21/11/2008 - 00:01 por DiegoRomero | Informe spam
Hola

A ver si me pueden dar una luz con lo siguiente:

la tabla Acumulados tiene los campos Cuenta,Mes,
SaldoInicial,Debitos,Credito
La llave primaria es Cuenta y Mes

Los registros se agregan cada mes calculando de otra tabla de
movimientos.

Lo que no he podido realizar es la actualización del SaldoInicial, que
viene del mes anterior como (saldoinicial+debitos-creditos).

¿Como hago una instrucción INSERT INTO ... donde agregue los registros
del mes anterior, si no existen en el actual, o actualice el campo
SaldoInicial si ya existe el registro en el mes actual. ?

ejemplo:
Cuenta , mes,saldoinicial,debito,credito
1105 1 0 500000 0
1105 2 0 0 400000
1110 1 100000 0 50000
1305 1 0 1000000 100000
1305 2 0 500000 0
2205 1 0 0 1400000

En el caso de la cuenta 1105 y 1305 se debe actualizar el campo
SaldoInicial,
y en caso de 1110 y 2205 se debe agregar el registro para el mes 2

Espero me puedan ayudar.


Diego M Romero

Preguntas similare

Leer las respuestas

#1 Jose TH
21/11/2008 - 01:17 | Informe spam
Hola Diego

Aunque no indicaste el año, como alternativa a tener que actualizar
directamente esa tabla, creo que puedes mirar la opción de usar mejor una
vista indexada donde te queden ya resumidos los débitos y los créditos por
Cuenta, Año y Mes.
El balance inicial de cada Cuenta-Año-Mes lo puedes calcular con un SUM
sobre la vista indexada en una función de usuario a la que le mandes esos
parámetros o hacer una Vista Normal sobre la indexada que te de ese cálculo
y/o también utilice la función de balance inicial. Son apenas 12 registros
por cuenta por año por tanto no afecta mucho el performance el SUM para el
balance inicial.
Si es necesario agregar los meses faltantes (de las cuentas sin
transacciones en determinado mes), debes ampliar la definición de la vista
normal para que de sus parámetros (probablemente un rango arbitrario de
meses o de fechas) te incluya los registros de los meses faltantes ya sea
con una "Union all" o un "Cross Join" o cualquier otra técnica.
Sólo es una opción, ya te darán otras.

Jose TH


"DiegoRomero" escribió en el mensaje
news:
Hola

A ver si me pueden dar una luz con lo siguiente:

la tabla Acumulados tiene los campos Cuenta,Mes,
SaldoInicial,Debitos,Credito
La llave primaria es Cuenta y Mes

Los registros se agregan cada mes calculando de otra tabla de
movimientos.

Lo que no he podido realizar es la actualización del SaldoInicial, que
viene del mes anterior como (saldoinicial+debitos-creditos).

¿Como hago una instrucción INSERT INTO ... donde agregue los registros
del mes anterior, si no existen en el actual, o actualice el campo
SaldoInicial si ya existe el registro en el mes actual. ?

ejemplo:
Cuenta , mes,saldoinicial,debito,credito
1105 1 0 500000 0
1105 2 0 0 400000
1110 1 100000 0 50000
1305 1 0 1000000 100000
1305 2 0 500000 0
2205 1 0 0 1400000

En el caso de la cuenta 1105 y 1305 se debe actualizar el campo
SaldoInicial,
y en caso de 1110 y 2205 se debe agregar el registro para el mes 2

Espero me puedan ayudar.


Diego M Romero
Respuesta Responder a este mensaje
#2 DiegoRomero
21/11/2008 - 18:11 | Informe spam
Muchas gracias por su opinion, y tiene razon, el campo año si existe.

Pero...
Se como hacer una simple vista, lo que no se, es si el SQL 2000
permita vistas indexas y como se crean.

Bueno voy a buscar información en la ayuda

Hasta pronto

Diego M Romero

On 20 nov, 19:17, "Jose TH" <>>> wrote:
Hola Diego

Aunque no indicaste el año, como alternativa a tener que actualizar
directamente esa tabla,  creo que puedes mirar la opción de usar mejor una
vista indexada donde te queden ya resumidos los débitos y los créditos por
Cuenta, Año y Mes.
El balance inicial de cada Cuenta-Año-Mes lo puedes calcular con un SUM
sobre la vista indexada en una función de usuario a la que le mandes esos
parámetros o hacer una Vista Normal sobre la indexada que te de ese cálculo
y/o también utilice la función de balance inicial.  Son apenas 12 registros
por cuenta por año por tanto no afecta mucho el performance el SUM para el
balance inicial.
Si es necesario  agregar los meses faltantes (de las cuentas sin
transacciones en determinado mes), debes ampliar la definición de la vista
normal para que de sus parámetros (probablemente un rango arbitrario de
meses o de fechas) te incluya los registros de los meses faltantes ya sea
con una "Union all" o un "Cross Join" o cualquier otra técnica.
Sólo es una opción, ya te darán otras.

Jose TH

"DiegoRomero" escribió en el mensajenews:
Hola

A ver si me pueden dar una luz con lo siguiente:

la tabla Acumulados tiene los campos Cuenta,Mes,
SaldoInicial,Debitos,Credito
La llave primaria es Cuenta y Mes

Los registros se agregan cada mes calculando de otra tabla de
movimientos.

Lo que no he podido realizar es la actualización del SaldoInicial, que
viene del mes anterior como (saldoinicial+debitos-creditos).

¿Como hago una instrucción INSERT INTO ... donde agregue los registros
del mes anterior, si no existen en el actual, o actualice el campo
SaldoInicial si ya existe el registro en el mes actual. ?

ejemplo:
Cuenta , mes,saldoinicial,debito,credito
1105 1 0 500000 0
1105 2 0 0 400000
1110 1 100000 0 50000
1305 1 0 1000000 100000
1305 2 0 500000 0
2205 1 0 0 1400000

En el caso de la cuenta 1105 y 1305 se debe actualizar el campo
SaldoInicial,
y en caso de 1110 y 2205 se debe agregar el registro para el mes 2

Espero me puedan ayudar.

Diego M Romero
Respuesta Responder a este mensaje
#3 Jose TH
21/11/2008 - 18:38 | Informe spam
Sí. Aunque yo ya no uso esa versión, sé que las vistas indexadas ya existían
en la versión 2000 y funcionan muy bien para casos como el que planteaste.

No es que la versión 2000 sea mala en lo absoluto (al contrario) pero, ya
que trabajas con sistemas de contabilidad que normalmente requieren mucho
manejo de resúmenes, grupos y jerarquía de cuentas (estructuras de árbol),
las versiones más recientes traen mayores facilidades para consultas y
operaciones orientadas a eso.

Claro que encontrarás por ahí quienes te sugieran que no, que permanezcas
con la versión 2000 de por vida. Pero... no les hagas mucho caso :)




"DiegoRomero" escribió en el mensaje
news:
Muchas gracias por su opinion, y tiene razon, el campo año si existe.

Pero...
Se como hacer una simple vista, lo que no se, es si el SQL 2000
permita vistas indexas y como se crean.

Bueno voy a buscar información en la ayuda

Hasta pronto

Diego M Romero

On 20 nov, 19:17, "Jose TH" <>>> wrote:
Hola Diego

Aunque no indicaste el año, como alternativa a tener que actualizar
directamente esa tabla, creo que puedes mirar la opción de usar mejor una
vista indexada donde te queden ya resumidos los débitos y los créditos por
Cuenta, Año y Mes.
El balance inicial de cada Cuenta-Año-Mes lo puedes calcular con un SUM
sobre la vista indexada en una función de usuario a la que le mandes esos
parámetros o hacer una Vista Normal sobre la indexada que te de ese
cálculo
y/o también utilice la función de balance inicial. Son apenas 12 registros
por cuenta por año por tanto no afecta mucho el performance el SUM para el
balance inicial.
Si es necesario agregar los meses faltantes (de las cuentas sin
transacciones en determinado mes), debes ampliar la definición de la vista
normal para que de sus parámetros (probablemente un rango arbitrario de
meses o de fechas) te incluya los registros de los meses faltantes ya sea
con una "Union all" o un "Cross Join" o cualquier otra técnica.
Sólo es una opción, ya te darán otras.

Jose TH

"DiegoRomero" escribió en el
mensajenews:
Hola

A ver si me pueden dar una luz con lo siguiente:

la tabla Acumulados tiene los campos Cuenta,Mes,
SaldoInicial,Debitos,Credito
La llave primaria es Cuenta y Mes

Los registros se agregan cada mes calculando de otra tabla de
movimientos.

Lo que no he podido realizar es la actualización del SaldoInicial, que
viene del mes anterior como (saldoinicial+debitos-creditos).

¿Como hago una instrucción INSERT INTO ... donde agregue los registros
del mes anterior, si no existen en el actual, o actualice el campo
SaldoInicial si ya existe el registro en el mes actual. ?

ejemplo:
Cuenta , mes,saldoinicial,debito,credito
1105 1 0 500000 0
1105 2 0 0 400000
1110 1 100000 0 50000
1305 1 0 1000000 100000
1305 2 0 500000 0
2205 1 0 0 1400000

En el caso de la cuenta 1105 y 1305 se debe actualizar el campo
SaldoInicial,
y en caso de 1110 y 2205 se debe agregar el registro para el mes 2

Espero me puedan ayudar.

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