25/09/2009, 22:55
|
| | | Fecha de Ingreso: diciembre-2001 Ubicación: Monterrey, Nuevo León
Mensajes: 433
Antigüedad: 23 años Puntos: 7 | |
Respuesta: error con sumar datos sql en consulta Divide et Impera. Debes preagregar los valores antes de hacer el join con el catálogo base.
Código:
SET DATEFORMAT DMY;
DECLARE @Pedidos TABLE(
Id_Pedido INT NOT NULL,
Fecha DATETIME NOT NULL,
Cantidad INT NOT NULL,
Id_Producto INT NOT NULL
);
INSERT INTO @Pedidos
SELECT 1, '02/01/2009 00:00', 10, 1 UNION ALL
SELECT 2, '03/01/2009 00:00', 20, 2 UNION ALL
SELECT 3, '03/01/2009 00:00', 15, 3 UNION ALL
SELECT 4, '05/02/2009 00:00', 8, 1 UNION ALL
SELECT 5, '06/02/2009 00:00', 25, 2 UNION ALL
SELECT 6, '07/02/2009 00:00', 10, 3;
DECLARE @Ventas TABLE(
Id_Venta INT NOT NULL,
Fecha DATETIME NOT NULL,
Cantidad INT NOT NULL,
Id_Producto INT NOT NULL
);
INSERT INTO @Ventas
SELECT 1, '01/02/2009 00:00', 2, 1 UNION ALL
SELECT 2, '02/02/2009 00:00', 4, 2 UNION ALL
SELECT 3, '02/02/2009 00:00', 3, 1 UNION ALL
SELECT 4, '03/02/2009 00:00', 3, 1 UNION ALL
SELECT 5, '03/02/2009 00:00', 1, 3 UNION ALL
SELECT 6, '03/02/2009 00:00', 2, 2 UNION ALL
SELECT 7, '05/02/2009 00:00', 6, 2 UNION ALL
SELECT 8, '05/02/2009 00:00', 2, 3;
DECLARE @Productos TABLE(
Id_Producto INT NOT NULL,
Producto VARCHAR(15) NOT NULL
);
INSERT INTO @Productos
SELECT 1, 'Cuaderno' UNION ALL
SELECT 2, 'Lapicero' UNION ALL
SELECT 3, 'Libro';
SELECT pr.Id_Producto,
pr.Producto,
pe.Pedidos,
ve.Ventas,
(pe.Pedidos - ve.Ventas) AS Stock
FROM @Productos AS pr
INNER JOIN (
SELECT Id_Producto,
SUM(Cantidad) AS Pedidos
FROM @Pedidos
GROUP BY Id_Producto) AS pe
ON pr.Id_Producto = pe.Id_Producto
INNER JOIN (
SELECT Id_Producto,
SUM(Cantidad) AS Ventas
FROM @Ventas
GROUP BY Id_Producto) AS ve
ON pr.Id_Producto = ve.Id_Producto;
Saludos. |