Ver Mensaje Individual
  #2 (permalink)  
Antiguo 01/08/2012, 04:26
pcid
Usuario no validado
 
Fecha de Ingreso: abril-2008
Mensajes: 50
Antigüedad: 16 años, 10 meses
Puntos: 16
Respuesta: Mostrar stock de articulos

Se puede hacer en una sola consulta....

Código SQL:
Ver original
  1. CREATE TABLE fdw_example3_bodega (
  2.   Id_Bodega INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  3.   Descripcion VARCHAR(200) NOT NULL,  
  4.   PRIMARY KEY  (Id_Bodega)
  5. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 ;
  6.  
  7. CREATE TABLE fdw_example3_articulo (
  8.   Id_Articulo INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  9.   Descripcion VARCHAR(200) NOT NULL,  
  10.   PRIMARY KEY  (Id_Articulo)
  11. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 ;
  12.  
  13. CREATE TABLE fdw_example3_stock (
  14.   Id_Item INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  15.   Id_Articulo INT (10) NOT NULL,
  16.   Id_Bodega INT(10) NOT NULL,
  17.   Cantidad_Entrada INT(10) NOT NULL,
  18.   Cantidad_Salida INT(10) NOT NULL,  
  19.   PRIMARY KEY  (Id_Item)
  20. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 ;
  21.  
  22. /* 1 BODEGA NORTE
  23.     2 BODEGA CENTRO
  24.     3 BODEGA SUR
  25. */ 
  26. INSERT INTO fdw_example3_bodega (Descripcion) VALUES ('Bodega Norte');
  27. INSERT INTO fdw_example3_bodega (Descripcion) VALUES ('Bodega Centro');
  28. INSERT INTO fdw_example3_bodega (Descripcion) VALUES ('Bodega Sur');
  29.  
  30. INSERT INTO fdw_example3_articulo (Descripcion) VALUES ('Lápices');
  31. INSERT INTO fdw_example3_articulo (Descripcion) VALUES ('Plumones');
  32. INSERT INTO fdw_example3_articulo (Descripcion) VALUES ('Corrector');
  33. INSERT INTO fdw_example3_articulo (Descripcion) VALUES ('Goma de borrar');
  34.  
  35. INSERT INTO fdw_example3_stock (Id_Articulo, Id_Bodega, Cantidad_Entrada, Cantidad_Salida) VALUES (1, 2, 10, 0);
  36. INSERT INTO fdw_example3_stock (Id_Articulo, Id_Bodega, Cantidad_Entrada, Cantidad_Salida) VALUES (1, 3, 39, 0);
  37. INSERT INTO fdw_example3_stock (Id_Articulo, Id_Bodega, Cantidad_Entrada, Cantidad_Salida) VALUES (1, 3, 0, 13);
  38.  
  39. INSERT INTO fdw_example3_stock (Id_Articulo, Id_Bodega, Cantidad_Entrada, Cantidad_Salida) VALUES (2, 1, 8, 0);
  40. INSERT INTO fdw_example3_stock (Id_Articulo, Id_Bodega, Cantidad_Entrada, Cantidad_Salida) VALUES (2, 2, 21, 0);
  41.  
  42. INSERT INTO fdw_example3_stock (Id_Articulo, Id_Bodega, Cantidad_Entrada, Cantidad_Salida) VALUES (3, 1, 5, 0);
  43. INSERT INTO fdw_example3_stock (Id_Articulo, Id_Bodega, Cantidad_Entrada, Cantidad_Salida) VALUES (3, 2, 7, 0);
  44. INSERT INTO fdw_example3_stock (Id_Articulo, Id_Bodega, Cantidad_Entrada, Cantidad_Salida) VALUES (3, 3, 10, 0);
  45.  
  46. INSERT INTO fdw_example3_stock (Id_Articulo, Id_Bodega, Cantidad_Entrada, Cantidad_Salida) VALUES (4, 3, 15, 0);
  47.  
  48. commit;
  49.  
  50. SELECT Id_Bodega, Id_Articulo,
  51.         SUM(Cantidad_Entrada) AS Cantidad_Entrada,
  52.         SUM(Cantidad_Salida) AS Cantidad_Salida,
  53.         SUM(Cantidad_Entrada - Cantidad_Salida) AS Existencia
  54. FROM fdw_example3_stock
  55. GROUP BY Id_Bodega, Id_Articulo ORDER BY 1, 2;
  56.  
  57.  
  58. SELECT a.Id_Articulo, a.Descripcion AS 'Artículo',
  59.       SUM(CASE x.Id_Bodega WHEN 1 THEN x.Existencia ELSE 0 END) AS Bodega_Norte,
  60.       SUM(CASE x.Id_Bodega WHEN 2 THEN x.Existencia ELSE 0 END) AS Bodega_Centro,
  61.       SUM(CASE x.Id_Bodega WHEN 3 THEN x.Existencia ELSE 0 END) AS Bodega_Sur
  62. FROM fdw_example3_articulo a
  63. LEFT OUTER JOIN (
  64. SELECT Id_Bodega, Id_Articulo,
  65.         SUM(Cantidad_Entrada) AS Cantidad_Entrada,
  66.         SUM(Cantidad_Salida) AS Cantidad_Salida,
  67.         SUM(Cantidad_Entrada - Cantidad_Salida) AS Existencia
  68. FROM fdw_example3_stock
  69. GROUP BY Id_Bodega, Id_Articulo
  70. ) AS x ON x.Id_Articulo = a.Id_Articulo
  71. GROUP BY a.Id_Articulo, a.Descripcion ;

Resultado:

Código SQL:
Ver original
  1. Id_Articulo Artículo        Bodega_Norte    Bodega_Centro   Bodega_Sur
  2. 1           Lápices         0               10              26
  3. 2           Plumones        8               21              0
  4. 3           Corrector       5               7               10
  5. 4           Goma de borrar  0               0               15