Se puede hacer un UPDATE que haga referencias a filas anteriores.

11/09/2003 - 09:37 por A.Satorra | Informe spam
Hola a todos :

Estoy trabajando sobre SQL Server 2000 y mi duda es la
siguiente:
Tengo por una parta una tabla de artículos vendidos,
otra de compras efectuadas, Traspasos entre almacenes,
Existencias iniciales y regularizaciones de stock entre
otros.
El objetivo es sacar un extracto de un artículo con
todos los movimientos que haya tenido. Si inserto en una
tabla temporal los movimientos y las cantidades. ¿ Se
podria hacer un UPDATE de la existencia actual =
movimiento actual +- la existencia de la fila anterior
sin tener que hacer un CURSOR que recorra todas las
fichas ?

Gracias de antemano
A.Satorra

Preguntas similare

Leer las respuestas

#1 Miguel Egea
11/09/2003 - 09:56 | Informe spam
Poderse si se puede, pero es mucho más sencillo hacerlo en las herramientas
de cliente, habría que hacerlo con un subselect. Por otra parte no es
necesaria una tabla temporal de movimientos, puedes usar union all para
obtener el resultado.


Saludos Cordiales
=Proxima reunión virtual sobre rendimiento
Viernes 12 de Septiembre de 2003, 19:30 hora española.
18:30 hora GMT.
A través del canal #sqlserver del irc hispano

Miguel Egea
http://www.portalsql.com
Microsoft SQL-SERVER MVP.

¡Cuida el rendimiento! Evita los cursores
Brigada Anti-Cursores
==

"A.Satorra" escribió en el mensaje
news:140a01c37837$9a50b220$
Hola a todos :

Estoy trabajando sobre SQL Server 2000 y mi duda es la
siguiente:
Tengo por una parta una tabla de artículos vendidos,
otra de compras efectuadas, Traspasos entre almacenes,
Existencias iniciales y regularizaciones de stock entre
otros.
El objetivo es sacar un extracto de un artículo con
todos los movimientos que haya tenido. Si inserto en una
tabla temporal los movimientos y las cantidades. ¿ Se
podria hacer un UPDATE de la existencia actual movimiento actual +- la existencia de la fila anterior
sin tener que hacer un CURSOR que recorra todas las
fichas ?

Gracias de antemano
A.Satorra
Respuesta Responder a este mensaje
#2 A.Satorra
11/09/2003 - 10:42 | Informe spam
Hola Miguel :

No te preocupes por el tema de la consulta ya esta toda
hecha en UNION ALL.
Pero como tengo que consultar los mismos datos desde
diferentes partes del programa, poner las operaciones en
la parte del cliente me comporta tener que repetir lo
mismo (x) veces con el problema añadido que siempre te
puedes olvidar algo en alguna parte y tener problemas si
ya lo tienes todo arreglado en un SP se acabó el problema.

¿ Como harias el subquery si es que se puede ?

Muchas gracias:

Poderse si se puede, pero es mucho más sencillo hacerlo


en las herramientas
de cliente, habría que hacerlo con un subselect. Por


otra parte no es
necesaria una tabla temporal de movimientos, puedes usar


union all para
obtener el resultado.


Saludos Cordiales
=>Proxima reunión virtual sobre rendimiento
Viernes 12 de Septiembre de 2003, 19:30 hora española.
18:30 hora GMT.
A través del canal #sqlserver del irc hispano

Miguel Egea
http://www.portalsql.com
Microsoft SQL-SERVER MVP.

¡Cuida el rendimiento! Evita los cursores
Brigada Anti-Cursores
==>

"A.Satorra" escribió en el mensaje
news:140a01c37837$9a50b220$
Hola a todos :

Estoy trabajando sobre SQL Server 2000 y mi duda es la
siguiente:
Tengo por una parta una tabla de artículos vendidos,
otra de compras efectuadas, Traspasos entre almacenes,
Existencias iniciales y regularizaciones de stock entre
otros.
El objetivo es sacar un extracto de un artículo con
todos los movimientos que haya tenido. Si inserto en una
tabla temporal los movimientos y las cantidades. ¿ Se
podria hacer un UPDATE de la existencia actual >movimiento actual +- la existencia de la fila anterior
sin tener que hacer un CURSOR que recorra todas las
fichas ?

Gracias de antemano
A.Satorra


.

Respuesta Responder a este mensaje
#3 Miguel Egea
11/09/2003 - 11:24 | Informe spam
Supongo que tu estructura será parecida a esta

Empresa , artículo, fecha,cantidad (+ o - si es salida entrada)
Si esto se llama #t

será

select * , (select sum(cantidad) from #t t2 where
t.empresa=t2.empresa and
t.articulo=t2.articulo and
t2.fecha<t.fecha)
from #t t order by fecha
Esto con esta estructura no funcionará del todo bien si hay varioms
movimientos en el mismo día, si es así tendrás que añadir un campo (por
ejemplo autonumérico) para evitar sumar el mismo registro más de una vez.
Saludos Cordiales
=Proxima reunión virtual sobre rendimiento
Viernes 12 de Septiembre de 2003, 19:30 hora española.
18:30 hora GMT.
A través del canal #sqlserver del irc hispano

Miguel Egea
http://www.portalsql.com
Microsoft SQL-SERVER MVP.

¡Cuida el rendimiento! Evita los cursores
Brigada Anti-Cursores
==

"A.Satorra" escribió en el mensaje
news:148201c37840$af566260$
Hola Miguel :

No te preocupes por el tema de la consulta ya esta toda
hecha en UNION ALL.
Pero como tengo que consultar los mismos datos desde
diferentes partes del programa, poner las operaciones en
la parte del cliente me comporta tener que repetir lo
mismo (x) veces con el problema añadido que siempre te
puedes olvidar algo en alguna parte y tener problemas si
ya lo tienes todo arreglado en un SP se acabó el problema.

¿ Como harias el subquery si es que se puede ?

Muchas gracias:

Poderse si se puede, pero es mucho más sencillo hacerlo


en las herramientas
de cliente, habría que hacerlo con un subselect. Por


otra parte no es
necesaria una tabla temporal de movimientos, puedes usar


union all para
obtener el resultado.


Saludos Cordiales
=>Proxima reunión virtual sobre rendimiento
Viernes 12 de Septiembre de 2003, 19:30 hora española.
18:30 hora GMT.
A través del canal #sqlserver del irc hispano

Miguel Egea
http://www.portalsql.com
Microsoft SQL-SERVER MVP.

¡Cuida el rendimiento! Evita los cursores
Brigada Anti-Cursores
==>

"A.Satorra" escribió en el mensaje
news:140a01c37837$9a50b220$
Hola a todos :

Estoy trabajando sobre SQL Server 2000 y mi duda es la
siguiente:
Tengo por una parta una tabla de artículos vendidos,
otra de compras efectuadas, Traspasos entre almacenes,
Existencias iniciales y regularizaciones de stock entre
otros.
El objetivo es sacar un extracto de un artículo con
todos los movimientos que haya tenido. Si inserto en una
tabla temporal los movimientos y las cantidades. ¿ Se
podria hacer un UPDATE de la existencia actual >movimiento actual +- la existencia de la fila anterior
sin tener que hacer un CURSOR que recorra todas las
fichas ?

Gracias de antemano
A.Satorra


.

Respuesta Responder a este mensaje
#4 A.Satorra
11/09/2003 - 11:41 | Informe spam
Muchas Gracias Miguel :

Mañana lo pruebo que hoy es fiesta en Cataluña.


Supongo que tu estructura será parecida a esta

Empresa , artículo, fecha,cantidad (+ o - si es salida


entrada)
Si esto se llama #t

será

select * , (select sum(cantidad) from #t t2 where
t.empresa=t2.empresa and
t.articulo=t2.articulo and
t2.fecha<t.fecha)
from #t t order by fecha
Esto con esta estructura no funcionará del todo bien si


hay varioms
movimientos en el mismo día, si es así tendrás que


añadir un campo (por
ejemplo autonumérico) para evitar sumar el mismo


registro más de una vez.
Saludos Cordiales
=>Proxima reunión virtual sobre rendimiento
Viernes 12 de Septiembre de 2003, 19:30 hora española.
18:30 hora GMT.
A través del canal #sqlserver del irc hispano

Miguel Egea
http://www.portalsql.com
Microsoft SQL-SERVER MVP.

¡Cuida el rendimiento! Evita los cursores
Brigada Anti-Cursores
==>

"A.Satorra" escribió en el mensaje
news:148201c37840$af566260$
Hola Miguel :

No te preocupes por el tema de la consulta ya esta toda
hecha en UNION ALL.
Pero como tengo que consultar los mismos datos desde
diferentes partes del programa, poner las operaciones en
la parte del cliente me comporta tener que repetir lo
mismo (x) veces con el problema añadido que siempre te
puedes olvidar algo en alguna parte y tener problemas si
ya lo tienes todo arreglado en un SP se acabó el


problema.

¿ Como harias el subquery si es que se puede ?

Muchas gracias:

Poderse si se puede, pero es mucho más sencillo hacerlo


en las herramientas
de cliente, habría que hacerlo con un subselect. Por


otra parte no es
necesaria una tabla temporal de movimientos, puedes usar


union all para
obtener el resultado.


Saludos Cordiales
=>>Proxima reunión virtual sobre rendimiento
Viernes 12 de Septiembre de 2003, 19:30 hora española.
18:30 hora GMT.
A través del canal #sqlserver del irc hispano

Miguel Egea
http://www.portalsql.com
Microsoft SQL-SERVER MVP.

¡Cuida el rendimiento! Evita los cursores
Brigada Anti-Cursores
==>>

"A.Satorra" escribió en el mensaje
news:140a01c37837$9a50b220$
Hola a todos :

Estoy trabajando sobre SQL Server 2000 y mi duda es la
siguiente:
Tengo por una parta una tabla de artículos vendidos,
otra de compras efectuadas, Traspasos entre almacenes,
Existencias iniciales y regularizaciones de stock entre
otros.
El objetivo es sacar un extracto de un artículo con
todos los movimientos que haya tenido. Si inserto en una
tabla temporal los movimientos y las cantidades. ¿ Se
podria hacer un UPDATE de la existencia actual >>movimiento actual +- la existencia de la fila anterior
sin tener que hacer un CURSOR que recorra todas las
fichas ?

Gracias de antemano
A.Satorra


.





.

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