SQL - Ayuda con inventarios

 
Vista:

Ayuda con inventarios

Publicado por Alberto Valero (25 intervenciones) el 08/04/2009 00:40:27
saludos,
soy relativamente nuevo al sql, estamos haciendo un proyecto de inventarios, en si la logica es sencilla, todos los dias se hacen movimientos en una tabla movimientos.

movimientos

id
fecha
producto_id
tipo mov (1 es entrada, 2 es salida)

basicamente, al finalizar el dia debemos correr un proceso para que sumarize estos datos
inventario inicial+entradas-salidas, y poner eso en una tabla inventario, en si el inventario inicial seria el campo cantidad de la ultima fecha

inventario
id
fecha
producto_id
cantidad

como podria lograr esto en sql con stored procedure, con cursores?, tablas temporales?, ayuda porfa, graciasssss
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de roger

RE:Ayuda con inventarios

Publicado por roger (93 intervenciones) el 08/04/2009 14:52:49
pues la idea es no usar cursores, en lo posible trata de evitarlos, tambien las tablas temporales, pues si habria que mirar la forma de hacerlo en una sola sentencia.
No entiendo bien la forma como lo tienen planteado, pero
creo que algo mas o menos como esto podria ser.

@fecha es la fecha que se esta evaluando.

insert into inventario(fecha,producto_id ,cantidad)
select @fecha,m.producto_id,isnull((select top 1 cantidad from
inventario d where d.producto_id = m.producto_id order by fecha desc),0)
+ sum(CASE when m.tipoMov = 1 THEN 1 ELSE 0 END)
-sum(CASE when m.tipoMov = 2 THEN 1 ELSE 0 END)
from movimientos m where fecha = @fecha
group by m.producto_id

Agrupo por el id del producto para la fecha que se esta evaluando (que me imagino que es el ultimo dia), y sumo los tipo de movimiento 1 y resto los tipo de movimiento 2. Tambien al principio sumo lo que habia del dia anterior, seleccionandolo de la tabla de inventario donde coincidan los id de productos, pero solo tomo el primer registro (por eso el top), ordenado descendente (para que me tome la ultima fecha nada mas), si no se ha ingresado ningun registro todavia en la tabla de inventario, esto devolverá null, y al sumar null con otro numero quedará null, por eso pongo la validación Isnull, para que me reemplace con cero cuando esto pase

Espero que te sirva de algo, o te puedas guiar con esto
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con inventarios

Publicado por Alberto Valero (25 intervenciones) el 08/04/2009 18:42:38
Eres grande roger funciono de maravilla, porque eh leido que es lo menos recomendable usar cursores, que tal las table variables, gracias de nuevo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de roger

RE:Ayuda con inventarios

Publicado por roger (93 intervenciones) el 08/04/2009 19:46:50
las variables tipo tabla tengo entendido que trabajan en memoria y son mas recomendadas que usar tablas temporales que se almacenan en la tempdb, en todo caso esto afectara en la medida que se procesen miles y miles de registros, para cantidades pequeñas no debe haber problema, y pues si no queda de otra, seria necesario utilizarlas. Aqui hay documentacion con relacion a las tablas temporales y variables tipo tabla

http://www.sqlgurus.org/SQLGURUS/Tablas+temporales.doc
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar