Se puede hacer en una sola consulta....
Código SQL:
Ver originalCREATE TABLE fdw_example3_bodega (
Id_Bodega INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
Descripcion VARCHAR(200) NOT NULL,
PRIMARY KEY (Id_Bodega)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ;
CREATE TABLE fdw_example3_articulo (
Id_Articulo INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
Descripcion VARCHAR(200) NOT NULL,
PRIMARY KEY (Id_Articulo)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ;
CREATE TABLE fdw_example3_stock (
Id_Item INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
Id_Articulo INT (10) NOT NULL,
Id_Bodega INT(10) NOT NULL,
Cantidad_Entrada INT(10) NOT NULL,
Cantidad_Salida INT(10) NOT NULL,
PRIMARY KEY (Id_Item)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ;
/* 1 BODEGA NORTE
2 BODEGA CENTRO
3 BODEGA SUR
*/
INSERT INTO fdw_example3_bodega (Descripcion) VALUES ('Bodega Norte');
INSERT INTO fdw_example3_bodega (Descripcion) VALUES ('Bodega Centro');
INSERT INTO fdw_example3_bodega (Descripcion) VALUES ('Bodega Sur');
INSERT INTO fdw_example3_articulo (Descripcion) VALUES ('Lápices');
INSERT INTO fdw_example3_articulo (Descripcion) VALUES ('Plumones');
INSERT INTO fdw_example3_articulo (Descripcion) VALUES ('Corrector');
INSERT INTO fdw_example3_articulo (Descripcion) VALUES ('Goma de borrar');
INSERT INTO fdw_example3_stock (Id_Articulo, Id_Bodega, Cantidad_Entrada, Cantidad_Salida) VALUES (1, 2, 10, 0);
INSERT INTO fdw_example3_stock (Id_Articulo, Id_Bodega, Cantidad_Entrada, Cantidad_Salida) VALUES (1, 3, 39, 0);
INSERT INTO fdw_example3_stock (Id_Articulo, Id_Bodega, Cantidad_Entrada, Cantidad_Salida) VALUES (1, 3, 0, 13);
INSERT INTO fdw_example3_stock (Id_Articulo, Id_Bodega, Cantidad_Entrada, Cantidad_Salida) VALUES (2, 1, 8, 0);
INSERT INTO fdw_example3_stock (Id_Articulo, Id_Bodega, Cantidad_Entrada, Cantidad_Salida) VALUES (2, 2, 21, 0);
INSERT INTO fdw_example3_stock (Id_Articulo, Id_Bodega, Cantidad_Entrada, Cantidad_Salida) VALUES (3, 1, 5, 0);
INSERT INTO fdw_example3_stock (Id_Articulo, Id_Bodega, Cantidad_Entrada, Cantidad_Salida) VALUES (3, 2, 7, 0);
INSERT INTO fdw_example3_stock (Id_Articulo, Id_Bodega, Cantidad_Entrada, Cantidad_Salida) VALUES (3, 3, 10, 0);
INSERT INTO fdw_example3_stock (Id_Articulo, Id_Bodega, Cantidad_Entrada, Cantidad_Salida) VALUES (4, 3, 15, 0);
commit;
SELECT Id_Bodega, Id_Articulo,
SUM(Cantidad_Entrada) AS Cantidad_Entrada,
SUM(Cantidad_Salida) AS Cantidad_Salida,
SUM(Cantidad_Entrada - Cantidad_Salida) AS Existencia
FROM fdw_example3_stock
GROUP BY Id_Bodega, Id_Articulo ORDER BY 1, 2;
SELECT a.Id_Articulo, a.Descripcion AS 'Artículo',
SUM(CASE x.Id_Bodega WHEN 1 THEN x.Existencia ELSE 0 END) AS Bodega_Norte,
SUM(CASE x.Id_Bodega WHEN 2 THEN x.Existencia ELSE 0 END) AS Bodega_Centro,
SUM(CASE x.Id_Bodega WHEN 3 THEN x.Existencia ELSE 0 END) AS Bodega_Sur
FROM fdw_example3_articulo a
LEFT OUTER JOIN (
SELECT Id_Bodega, Id_Articulo,
SUM(Cantidad_Entrada) AS Cantidad_Entrada,
SUM(Cantidad_Salida) AS Cantidad_Salida,
SUM(Cantidad_Entrada - Cantidad_Salida) AS Existencia
FROM fdw_example3_stock
GROUP BY Id_Bodega, Id_Articulo
) AS x ON x.Id_Articulo = a.Id_Articulo
GROUP BY a.Id_Articulo, a.Descripcion ;
Resultado:
Código SQL:
Ver originalId_Articulo Artículo Bodega_Norte Bodega_Centro Bodega_Sur
1 Lápices 0 10 26
2 Plumones 8 21 0
3 Corrector 5 7 10
4 Goma de borrar 0 0 15