Se puede hacer en una sola consulta....
    
Código SQL:
Ver original- CREATE 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 ; 
Código SQL:
Ver original- Id_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