Actualizacion de Stock con Dos Tablas

09/07/2004 - 00:44 por Dany Acosta | Informe spam
Amigos necesito actualizar los stocks de mi tabla productos contra mi
tabla Order_detalle mediante un Store Procedure y no tengo ni idea de
como realizarlo sin pasar por tablas temporales ... estas dos tablas de
ejemplo:
Tabla: Productos
Codigo Stock
01 12
02 10
03 9
10 4
Tabla: Order_Detail
Numero Codigo Cantidad
001 01 1
003 01 4
001 02 5

Necesito recorrer la tabla Order_detail para todos los que sean el
numero '001' y actualizar sus stock en la productos

Espero que me puedan ayudar con ese dilema...


Gracias

Preguntas similare

Leer las respuestas

#1 Maxi
09/07/2004 - 01:08 | Informe spam
Hola, veamos un ejemplo :

==
CREATE TABLE #ARTICULOS (ID INT, STOCK FLOAT)

CREATE TABLE #MOVIMIENTOS (ARTICULO_ID INT, FECHA DATETIME, TIPO CHAR(1),
CANTIDAD FLOAT)

INSERT INTO #ARTICULOS VALUES ('1',0)
INSERT INTO #ARTICULOS VALUES ('2',0)
INSERT INTO #ARTICULOS VALUES ('3',0)
INSERT INTO #ARTICULOS VALUES ('4',0)

INSERT INTO #MOVIMIENTOS VALUES ('1',GETDATE(),'E',100)
INSERT INTO #MOVIMIENTOS VALUES ('1',GETDATE(),'S',50)
INSERT INTO #MOVIMIENTOS VALUES ('1',GETDATE(),'E',10)
INSERT INTO #MOVIMIENTOS VALUES ('2',GETDATE(),'E',100)
INSERT INTO #MOVIMIENTOS VALUES ('3',GETDATE(),'E',100)
INSERT INTO #MOVIMIENTOS VALUES ('3',GETDATE(),'S',95)
INSERT INTO #MOVIMIENTOS VALUES ('4',GETDATE(),'E',100)

UPDATE #ARTICULOS SET STOCK = (SELECT SUM(CASE WHEN TIPO='E' THEN CANTIDAD
ELSE -CANTIDAD END)
FROM #MOVIMIENTOS WHERE #MOVIMIENTOS.ARTICULO_ID = #ARTICULOS.ID)
FROM #ARTICULOS,#MOVIMIENTOS

SELECT * FROM #ARTICULOS


SUERTE



Salu2
Maxi
Buenos Aires - Argentina
Desarrollador Microsoft 3 Estrellas .NET
Nunca consideres el estudio como una obligación sino como
una oportunidad para penetrar en el bello y maravillosos
mundo del saber.
- Albert Einstein



"Dany Acosta" escribió en el mensaje
news:
Amigos necesito actualizar los stocks de mi tabla productos contra mi
tabla Order_detalle mediante un Store Procedure y no tengo ni idea de
como realizarlo sin pasar por tablas temporales ... estas dos tablas de
ejemplo:
Tabla: Productos
Codigo Stock
01 12
02 10
03 9
10 4
Tabla: Order_Detail
Numero Codigo Cantidad
001 01 1
003 01 4
001 02 5

Necesito recorrer la tabla Order_detail para todos los que sean el
numero '001' y actualizar sus stock en la productos

Espero que me puedan ayudar con ese dilema...


Gracias





Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.714 / Virus Database: 470 - Release Date: 02/07/2004
Respuesta Responder a este mensaje
#2 Javier Loria
09/07/2004 - 01:20 | Informe spam
Hola:
Depende de si Order_Detail tiene como llave primaria Numero-Codigo o no.
Si Numero-Codigo es Llave Primaria o por los menos Unica, entonces es:
UPDATE Productos
SET Productos.Stock=Productos.Stock - Cantidad
FROM Productos
JOIN Order_Detail
ON Productos.Codigo=Order_Detail.Codigo
WHERE Order_Detail.Numero='001'
Si pueden existir productos repetidos en una Orden o si se van a rebajar
varias ordenes simultaneamente es un poco mas complejo:
UPDATE Productos
SET Productos.Stock=Productos.Stock - CantidadVendida
FROM Productos
JOIN (SELECT Codigo, SUM(Cantidad) AS CantidadVendida
FROM Order_Detail
WHERE Numero='001'
GROUP BY Codigo
) AS Ventas
ON Productos.Codigo=Ventas.Codigo
Ambas sintaxis no son ANSI y podrian darte problemas en otros motores de
Bases de Datos, pero son un poco mas claras.
Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

Dany Acosta escribio:
Amigos necesito actualizar los stocks de mi tabla productos contra mi
tabla Order_detalle mediante un Store Procedure y no tengo ni idea de
como realizarlo sin pasar por tablas temporales ... estas dos tablas
de ejemplo:
Tabla: Productos
Codigo Stock
01 12
02 10
03 9
10 4
Tabla: Order_Detail
Numero Codigo Cantidad
001 01 1
003 01 4
001 02 5

Necesito recorrer la tabla Order_detail para todos los que sean el
numero '001' y actualizar sus stock en la productos

Espero que me puedan ayudar con ese dilema...


Gracias
Respuesta Responder a este mensaje
#3 Dany Acosta
09/07/2004 - 18:23 | Informe spam
Ok...

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