(O.T.) Sentencia SQL COMPLICADA

22/06/2006 - 16:58 por Guille | Informe spam
Hola a todos.

Tengo dos tablas "Ventas" y "Almacen"

la tabla Ventas, tiene los siguientes registros:

Codigo_Articulo Unidades_Vendidas
0001 5
0001 7


Por otro lado tengo la tabla "Almacen" que tiene el siguiente registro:

Codigo_Articulo Stock_Actual
0001 42


El objetivo es actualizar el stock de la tabla Almacen con las
Unidades_Vendidas de la tabla Ventas, para ello ponía esta sentencia
(SQL Server 2000)


UPDATE Almacen SET Stock_Actual = Stock_Actual -
Ventas.Unidades_Vendidas FROM Ventas WHERE
Almacen.Codigo_Articulo = Ventas.Codigo_Articulo



Esta sentencia funcionaba muy bien cuando la tabla ventas tiene
articulos distintos, pero cuando existen dos registros con el codigo de
articulo igual (como en el caso del ejemplo) solo me actualiza el stock
con las ventas del ULTIMO registro de la tabla Ventas, es decir, en el
caso del ejemplo, la tabla Almacen quedaria asi:


Codigo_Articulo Stock_Actual
0001 35

cuando deberia quedar asi:

Codigo_Articulo Stock_Actual
0001 30

¿Como podria solucionar esto?
Solo puede ser por sentencias SQL.

¿Alguna sugerencia?

De antemano muchas gracias a todos.

Saludos:

Guille :-)
Cádiz (España)

Preguntas similare

Leer las respuestas

#1 Alfredo Novoa
22/06/2006 - 17:54 | Informe spam
On Thu, 22 Jun 2006 16:58:56 +0200, Guille wrote:


El objetivo es actualizar el stock de la tabla Almacen con las
Unidades_Vendidas de la tabla Ventas, para ello ponía esta sentencia
(SQL Server 2000)


UPDATE Almacen SET Stock_Actual = Stock_Actual -
Ventas.Unidades_Vendidas FROM Ventas WHERE
Almacen.Codigo_Articulo = Ventas.Codigo_Articulo



Te has olvidado de poner el Sum()

UPDATE Almacen SET Stock_Actual = Stock_Actual -
Sum(Ventas.Unidades_Vendidas) FROM Ventas WHERE
Almacen.Codigo_Articulo = Ventas.Codigo_Articulo

De todas formas sería mejor usar un trigger para esto.


Saludos
Alfredo
Respuesta Responder a este mensaje
#2 Saul Muñoz (DsK)
22/06/2006 - 18:19 | Informe spam
Que tal Alfredo no se si has intentado tu consulta pero según yo una función
agregada al menos como tu la comentas.

yo te propondría esta respuesta Guille al menos es un poco más controlado
estoy suponiendo que tienes un campo en ventas que te indica si ya está
contabilizado o no, si no cada vez que actualizas el stock pues tendrías
problemas de duplicidad.

BEGIN TRAN

SELECT
CODIGO_ARTICULO, SUM(UNIDADES_VENDIDAS) UNIDADES_VENDIDAS
INTO #VENTAS
FROM VENTAS
WHERE CONTABILIZADO = 0
GROUP BY CODIGO_ARTICULO


UPDATE ALMACEN
SET STOCK_ACTUAL = STOCK_ACTUAL + VTA.UNIDADES_VENDIDAS
FROM ALMACEN ALM, #VENTAS VTA
WHERE ALM.CODIGO_ARTICULO = VTA.CODIGO_ARTICULO

UPDATE VENTAS
SET CONTABILIZADO = 1

IF @@ERROR = 0
COMMIT TRAN
ELSE
ROLLBACK TRAN

Saludos y espero que te sea útil.

"DsK En la búsqueda de MVP y MCSD :D"

"Alfredo Novoa" escribió:

On Thu, 22 Jun 2006 16:58:56 +0200, Guille wrote:


>El objetivo es actualizar el stock de la tabla Almacen con las
>Unidades_Vendidas de la tabla Ventas, para ello ponía esta sentencia
>(SQL Server 2000)
>
>
>UPDATE Almacen SET Stock_Actual = Stock_Actual -
>Ventas.Unidades_Vendidas FROM Ventas WHERE
>Almacen.Codigo_Articulo = Ventas.Codigo_Articulo

Te has olvidado de poner el Sum()

UPDATE Almacen SET Stock_Actual = Stock_Actual -
Sum(Ventas.Unidades_Vendidas) FROM Ventas WHERE
Almacen.Codigo_Articulo = Ventas.Codigo_Articulo

De todas formas sería mejor usar un trigger para esto.


Saludos
Alfredo

Respuesta Responder a este mensaje
#3 Ricardo Passians
23/06/2006 - 03:31 | Informe spam
Asumiendo que es SQL Server, prueba con un subquery, algunos de OO dirían un
wrapper para la tabla 'Ventas':

UPDATE Almacen SET Stock_Actual = Stock_Actual - Ventas.Unidades_Vendidas
FROM
(select Codigo_Articulo, Unidades_Vendidas=sum(Unidades_Vendidas) from
Ventas group by Codigo_Articulo) Ventas
WHERE Almacen.Codigo_Articulo = Ventas.Codigo_Articulo

Saludos
Respuesta Responder a este mensaje
#4 Guille
23/06/2006 - 13:01 | Informe spam
Muchas gracias a todos. Probaré las soluciones a ver cual se ajusta mas
al problema.

Saludos:

Guille :-)
Cádiz (España)




Guille escribió:
Hola a todos.

Tengo dos tablas "Ventas" y "Almacen"

la tabla Ventas, tiene los siguientes registros:

Codigo_Articulo Unidades_Vendidas
0001 5
0001 7


Por otro lado tengo la tabla "Almacen" que tiene el siguiente registro:

Codigo_Articulo Stock_Actual
0001 42


El objetivo es actualizar el stock de la tabla Almacen con las
Unidades_Vendidas de la tabla Ventas, para ello ponía esta sentencia
(SQL Server 2000)


UPDATE Almacen SET Stock_Actual = Stock_Actual -
Ventas.Unidades_Vendidas FROM Ventas WHERE
Almacen.Codigo_Articulo = Ventas.Codigo_Articulo



Esta sentencia funcionaba muy bien cuando la tabla ventas tiene
articulos distintos, pero cuando existen dos registros con el codigo de
articulo igual (como en el caso del ejemplo) solo me actualiza el stock
con las ventas del ULTIMO registro de la tabla Ventas, es decir, en el
caso del ejemplo, la tabla Almacen quedaria asi:


Codigo_Articulo Stock_Actual
0001 35

cuando deberia quedar asi:

Codigo_Articulo Stock_Actual
0001 30

¿Como podria solucionar esto?
Solo puede ser por sentencias SQL.

¿Alguna sugerencia?

De antemano muchas gracias a todos.

Saludos:

Guille :-)
Cádiz (España)






Respuesta Responder a este mensaje
#5 Jose Antonio
25/06/2006 - 10:47 | Informe spam
Si pretendes llevar el stock de los productos en tiempo real, tienes que
utilizar triggers.

"Guille" escribió en el mensaje
news:%
Muchas gracias a todos. Probaré las soluciones a ver cual se ajusta mas al
problema.

Saludos:

Guille :-)
Cádiz (España)




Guille escribió:
Hola a todos.

Tengo dos tablas "Ventas" y "Almacen"

la tabla Ventas, tiene los siguientes registros:

Codigo_Articulo Unidades_Vendidas
0001 5
0001 7


Por otro lado tengo la tabla "Almacen" que tiene el siguiente registro:

Codigo_Articulo Stock_Actual
0001 42


El objetivo es actualizar el stock de la tabla Almacen con las
Unidades_Vendidas de la tabla Ventas, para ello ponía esta sentencia (SQL
Server 2000)


UPDATE Almacen SET Stock_Actual = Stock_Actual - Ventas.Unidades_Vendidas
FROM Ventas WHERE
Almacen.Codigo_Articulo = Ventas.Codigo_Articulo



Esta sentencia funcionaba muy bien cuando la tabla ventas tiene articulos
distintos, pero cuando existen dos registros con el codigo de articulo
igual (como en el caso del ejemplo) solo me actualiza el stock con las
ventas del ULTIMO registro de la tabla Ventas, es decir, en el caso del
ejemplo, la tabla Almacen quedaria asi:


Codigo_Articulo Stock_Actual
0001 35

cuando deberia quedar asi:

Codigo_Articulo Stock_Actual
0001 30

¿Como podria solucionar esto?
Solo puede ser por sentencias SQL.

¿Alguna sugerencia?

De antemano muchas gracias a todos.

Saludos:

Guille :-)
Cádiz (España)





Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida