Ver Mensaje Individual
  #4 (permalink)  
Antiguo 17/01/2013, 01:51
quimfv
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Compras y Ventas en la misma consulta

Código MySQL:
Ver original
  1. SELECT sbc.codigo, sbc.nombre,
  2.                 ROUND(AVG(sbc.precioVenta), 2) 'Media Ventas',
  3.                 ROUND(AVG(sbc.precioCompra), 2) 'Media Compras',
  4.                 SUM(IF(MONTH(sbc.fecha)=1, sbc.CantidadVentas, 0)) 'EneroV',
  5.                 SUM(IF(MONTH(sbc.fecha)=1, sbc.CantidadCompras, 0)) 'EneroC',
  6.                 SUM(IF(MONTH(sbc.fecha)=2, sbc.CantidadVentas, 0)) 'FebreroV',
  7.                 SUM(IF(MONTH(sbc.fecha)=2, sbc.CantidadCompras, 0)) 'FebreroC',
  8.                 SUM(IF(MONTH(sbc.fecha)=3, sbc.CantidadVentas, 0)) 'MarzoV',
  9.                 SUM(IF(MONTH(sbc.fecha)=3, sbc.CantidadCompras, 0)) 'MarzoC',
  10.                 SUM(IF(MONTH(sbc.fecha)=4, sbc.CantidadVentas, 0)) 'AbrilV',
  11.                 SUM(IF(MONTH(sbc.fecha)=4, sbc.CantidadCompras, 0)) 'AbrilC',
  12.                 SUM(IF(MONTH(sbc.fecha)=5, sbc.CantidadVentas, 0)) 'MayoV',
  13.                 SUM(IF(MONTH(sbc.fecha)=5, sbc.CantidadCompras, 0)) 'MayoC',
  14.                 SUM(IF(MONTH(sbc.fecha)=6, sbc.CantidadVentas, 0)) 'JunioV',
  15.                 SUM(IF(MONTH(sbc.fecha)=6, sbc.CantidadCompras, 0)) 'JunioC',
  16.                 SUM(IF(MONTH(sbc.fecha)=7, sbc.CantidadVentas, 0)) 'JulioV',
  17.                 SUM(IF(MONTH(sbc.fecha)=7, sbc.CantidadCompras, 0)) 'JulioC',
  18.                 SUM(IF(MONTH(sbc.fecha)=8, sbc.CantidadVentas, 0)) 'AgostoV',
  19.                 SUM(IF(MONTH(sbc.fecha)=8, sbc.CantidadCompras, 0)) 'AgostoC',
  20.                 SUM(IF(MONTH(sbc.fecha)=9, sbc.CantidadVentas, 0)) 'SeptiembreV',
  21.                 SUM(IF(MONTH(sbc.fecha)=9, sbc.CantidadCompras, 0)) 'SeptiembreC',
  22.                 SUM(IF(MONTH(sbc.fecha)=10, sbc.CantidadVentas, 0)) 'OctubreV',
  23.                 SUM(IF(MONTH(sbc.fecha)=10, sbc.CantidadCompras, 0)) 'OctubreC',
  24.                 SUM(IF(MONTH(sbc.fecha)=11, sbc.CantidadVentas, 0)) 'NoviembreV',
  25.                 SUM(IF(MONTH(sbc.fecha)=11, sbc.CantidadCompras, 0)) 'NoviembreC',
  26.                 SUM(IF(MONTH(sbc.fecha)=12, sbc.CantidadVentas, 0)) 'DiciembreV',
  27.                 SUM(IF(MONTH(sbc.fecha)=12, sbc.CantidadCompras, 0)) 'DiciembreC',
  28.                 SUM(sbc.CantidadVentas) 'Total Ventas',
  29.                 SUM(sbc.CantidadCompras) 'Total Compras'
  30. SELECT a1.codigo, a1.nombre,
  31.              c.precio precioCompra,
  32.              NULL as precioVenta,
  33.              c.fecha,
  34.              c.cantidad as "CantidadCompras",
  35.              0 as "CantidadVentas"
  36. FROM articulo a1 INNER JOIN compra c ON a1.claart = c.claart
  37. WHERE YEAR(c.fecha)=2012
  38. SELECT a2.codigo, a2.nombre,
  39.              NULL as precioCompra,
  40.              v.precio as precioVenta,
  41.              v.fecha,
  42.              0 as "CantidadCompras",
  43.              v.cantidad as "CantidadVentas"
  44. FROM articulo a2 INNER JOIN venta v ON a2.claart = v.claart
  45. WHERE YEAR(v.fecha)=2012) as sbc
  46. GROUP BY sbc.codigo

No es compleja es una consulta sobre una subconsulta (sbc) que a su vez es una union de consultas.

SELECT .... FROM (SELECT... UNION ALL SELECT...) as sbc WHERE... GROUP BY....

Ahora funcionará....he cambiado v.fecha por sbc.fecha en el primer select ....

El precio medio debe ser ponderado.... SUMA(precio*cantidad)/SUMA(cantidad).


Código MySQL:
Ver original
  1. SELECT a1.codigo, a1.nombre,
  2.              SUM(c.precio*c.cantidad)/SUM(c.cantidad) PrecioMedioCompras
  3. FROM articulo a1 INNER JOIN compra c ON a1.claart = c.claart
  4. WHERE YEAR(c.fecha)=2012
  5. GROUP BY c.codigo
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 17/01/2013 a las 02:07