Ver Mensaje Individual
  #3 (permalink)  
Antiguo 19/11/2012, 15:56
Garhard
 
Fecha de Ingreso: septiembre-2012
Ubicación: Lima, Perú.
Mensajes: 20
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: [Duda] Subconsultas SQL

La lista de sumas totales de cada cliente(Distribuidoras):
Código SQL:
Ver original
  1. SELECT SUM(Q.cantidad * P.precio) AS Total, D.nombre AS Distri
  2. FROM Distribuidora D INNER JOIN (Venta V INNER JOIN (Venta_Detalle Q INNER JOIN
  3. Producto P ON Q.produc_id = P.produc_id)
  4. ON V.venta_id = Q.venta_id) ON D.distribuidora_id = V.distribuidora_id
  5. WHERE MONTH(V.fecha) IN ('01', '02', '03')
  6. GROUP BY D.nombre

El comando que saca su valor máximo:
Código SQL:
Ver original
  1. SELECT MAX(Totales.Total) AS Maximo
  2. FROM (SELECT SUM(Q.cantidad * P.precio) AS Total, D.nombre AS Distri
  3. FROM Distribuidora D INNER JOIN (Venta V INNER JOIN (Venta_Detalle Q INNER JOIN
  4. Producto P ON Q.produc_id = P.produc_id)
  5. ON V.venta_id = Q.venta_id) ON D.distribuidora_id = V.distribuidora_id
  6. WHERE MONTH(V.fecha) IN ('01', '02', '03')
  7. GROUP BY D.nombre) AS Totales

y si lo unimos para sacar su valor máximo y el nombre de su distribuidora, lo hice así:
Código SQL:
Ver original
  1. SELECT Totales.Distri AS 'Mejor cliente',TMaximo.Maximo AS 'Suma de totales'
  2. FROM (SELECT MAX(Totales.Total) AS Maximo
  3. FROM (SELECT SUM(Q.cantidad * P.precio) AS Total, D.nombre AS Distri
  4. FROM Distribuidora D INNER JOIN (Venta V INNER JOIN (Venta_Detalle Q INNER JOIN
  5. Producto P ON Q.produc_id = P.produc_id)
  6. ON V.venta_id = Q.venta_id) ON D.distribuidora_id = V.distribuidora_id
  7. WHERE MONTH(V.fecha) IN ('01', '02', '03')
  8. GROUP BY D.nombre) AS Totales) AS TMaximo,
  9. (SELECT SUM(Q.cantidad * P.precio) AS Total, D.nombre AS Distri
  10. FROM Distribuidora D INNER JOIN (Venta V INNER JOIN (Venta_Detalle Q INNER JOIN
  11. Producto P ON Q.produc_id = P.produc_id)
  12. ON V.venta_id = Q.venta_id) ON D.distribuidora_id = V.distribuidora_id
  13. WHERE MONTH(V.fecha) IN ('01', '02', '03')
  14. GROUP BY D.nombre) AS Totales
  15. WHERE Totales.Total = TMaximo.Maximo

Y me funcionó!

Aunque parece largo, quisiera saber si tienen otra idea para simplificar el último comando. Salu2!

Última edición por Garhard; 19/11/2012 a las 15:58 Razón: para resaltar en negrita y poner su cuadro en SQL.