Ver Mensaje Individual
  #6 (permalink)  
Antiguo 14/06/2011, 08:40
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Agrupamiento de campos

Hola leocap:

Se me ocurre que utilices ROW_NUMBER() para numerar cuantos máximos tienes y filtrar siempre el máximo #1, es decir, algo como esto:

Código SQL:
Ver original
  1. DECLARE @tabla TABLE (sucursal INT, producto VARCHAR, cantidad_vendida INT)
  2. INSERT INTO @tabla VALUES (1, 'a', 15)
  3. INSERT INTO @tabla VALUES (1, 'b', 22)
  4. INSERT INTO @tabla VALUES (1, 'c', 22)
  5. INSERT INTO @tabla VALUES (1, 'd', 22)
  6. INSERT INTO @tabla VALUES (1, 'c', 5)
  7. INSERT INTO @tabla VALUES (2, 'a', 12)
  8. INSERT INTO @tabla VALUES (2, 'b', 51)
  9. INSERT INTO @tabla VALUES (2, 'c', 51)
  10. INSERT INTO @tabla VALUES (2, 'd', 51)
  11. SELECT T1.sucursal, T1.producto, T1.cantidad_vendida,
  12. ROW_NUMBER() OVER(PARTITION BY T1.sucursal ORDER BY T1.sucursal, T1.cantidad_vendida) rownumber
  13. FROM @Tabla T1 INNER JOIN
  14. (SELECT sucursal, MAX(cantidad_vendida) max_cantidad_vendida FROM @tabla GROUP BY sucursal) T2 ON
  15. T1.sucursal = T2.sucursal AND
  16. T1.cantidad_vendida = T2.max_cantidad_vendida
  17. ORDER BY T1.sucursal

Si observas agregué varios máximos más para cada sucursal, por lo que la consulta te daría algo como esto:

Código:
sucursal    producto cantidad_vendida rownumber
----------- -------- ---------------- --------------------
1           b        22               1
1           c        22               2
1           d        22               3
2           b        51               1
2           c        51               2
2           d        51               3
Finalmente podrías hacer un nuevo select sobre este resultado para recuperar solo los registros con rownumber = 1, es decir algo como esto:

Código SQL:
Ver original
  1. SELECT TF.sucursal, TF.producto, TF.cantidad_vendida FROM
  2. (
  3. SELECT T1.sucursal, T1.producto, T1.cantidad_vendida,
  4. ROW_NUMBER() OVER(PARTITION BY T1.sucursal ORDER BY T1.sucursal, T1.cantidad_vendida) rownumber
  5. FROM @Tabla T1 INNER JOIN
  6. (SELECT sucursal, MAX(cantidad_vendida) max_cantidad_vendida FROM @tabla GROUP BY sucursal) T2 ON
  7. T1.sucursal = T2.sucursal AND
  8. T1.cantidad_vendida = T2.max_cantidad_vendida
  9. )TF
  10. WHERE rownumber = 1
  11. ORDER BY TF.sucursal

Esta consulta te regresaría lo siguiente:

Código:
sucursal    producto cantidad_vendida
----------- -------- ----------------
1           b        22
2           b        51
si encuentro alguna otra forma más sencilla de obtener este resultado la publico en en transcurso del día, por lo pronto prueba la consulta a ver si te sirve.

Saludos
Leo.