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 originalDECLARE @tabla TABLE (sucursal INT, producto VARCHAR, cantidad_vendida INT)
INSERT INTO @tabla VALUES (1, 'a', 15)
INSERT INTO @tabla VALUES (1, 'b', 22)
INSERT INTO @tabla VALUES (1, 'c', 22)
INSERT INTO @tabla VALUES (1, 'd', 22)
INSERT INTO @tabla VALUES (1, 'c', 5)
INSERT INTO @tabla VALUES (2, 'a', 12)
INSERT INTO @tabla VALUES (2, 'b', 51)
INSERT INTO @tabla VALUES (2, 'c', 51)
INSERT INTO @tabla VALUES (2, 'd', 51)
SELECT T1.sucursal, T1.producto, T1.cantidad_vendida,
ROW_NUMBER() OVER(PARTITION BY T1.sucursal ORDER BY T1.sucursal, T1.cantidad_vendida) rownumber
FROM @Tabla T1 INNER JOIN
(SELECT sucursal, MAX(cantidad_vendida) max_cantidad_vendida FROM @tabla GROUP BY sucursal) T2 ON
T1.sucursal = T2.sucursal AND
T1.cantidad_vendida = T2.max_cantidad_vendida
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 originalSELECT TF.sucursal, TF.producto, TF.cantidad_vendida FROM
(
SELECT T1.sucursal, T1.producto, T1.cantidad_vendida,
ROW_NUMBER() OVER(PARTITION BY T1.sucursal ORDER BY T1.sucursal, T1.cantidad_vendida) rownumber
FROM @Tabla T1 INNER JOIN
(SELECT sucursal, MAX(cantidad_vendida) max_cantidad_vendida FROM @tabla GROUP BY sucursal) T2 ON
T1.sucursal = T2.sucursal AND
T1.cantidad_vendida = T2.max_cantidad_vendida
)TF
WHERE rownumber = 1
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.