SQL Server - Agrupación de campos

   
Vista:

Agrupación de campos

Publicado por Leandro (2 intervenciones) el 10/06/2011 15:07:19
Estimados,
Tengo la siguiente tabla que muestra ID de sucursal, ID de producto y la cantidad vendida por producto y sucursal:

SUCURSAL PRODUCTO CANTIDAD VENDIDA
1 a 15
1 b 22
1 c 5
2 a 12
2 b 51
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Agrupación de campos

Publicado por Leandro (2 intervenciones) el 10/06/2011 15:10:05
Continua.. Necesito obtener el producto que más se vendió por sucursal, he probado haciendo max (CANTIDAD VENDIDA) y GROUP BY por SUCURSAL pero no he obtenido lo que necesito.. alguna idea??

Muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de roger

Agrupación de campos

Publicado por roger rogergomez780@hotmail.com (173 intervenciones) el 10/06/2011 19:09:42
mira, con esta consulta tendrias la suma de productos por sucursal

select SUM(cantidad) as Cantidad, producto, sucursal
from ventas group by producto, sucursal

Ahora, con este
SELECT MAX(tabla.cantidad), tabla.sucursal
FROM
(select SUM(cantidad) as Cantidad, producto, sucursal
from ventas group by producto, sucursal) tabla
group by tabla.sucursal

Obtendrias la mayor cantidad vendida por sucursal, pero el campo producto no se puede incluir en la consulta, de plano sql server no te lo permite( a menos que lo pusieras en el group by y no te serviría de nada), y pues que pasa si hay dos productos con la misma cantidad vendida??, sql server no sabría cual tomar.

La solucion que veria, seria tomar el primer producto que se encuentre con cantidad maxima, con un top dentro de la subconsulta

SELECT MAX(cantidad),sucursal, (select top 1 producto as nombreProducto
from (select SUM(cantidad) as Cantidad, producto, sucursal
from ventas group by producto, sucursal) tabla2
where tabla2.cantidad = MAX(tabla.cantidad))
FROM
(select SUM(cantidad) as Cantidad, producto, sucursal
from ventas group by producto, sucursal) tabla
group by tabla.sucursal

Es lo que se me ocurre, me supongo que habrán otras alternativas.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Agrupación de campos

Publicado por Juan Manuel Cruz juanmcruz@hotmail.com (59 intervenciones) el 13/06/2011 10:33:26
Puedes usar una función recursiva y una CTE.

El razonamiento es éste: ordenar de mayor a menor por cada sucursal la cantidad sumada de cada producto y entonces elegir sólo la primera línea, el mayor, para cada uno.

WITH CONSULTA ( sucursal, producto, cantotal, x_orden) AS (
SELECT sucursal, producto
SUM( cantidad ) AS CANTOTAL ,
ROW_NUMBER() OVER (PARTITION BY sucursal ORDER BY SUM( cantidad ) DESC )
AS X_ORDEN FROM TABLA_VENTAS
GROUP BY sucursal, producto
)
SELECT sucursal, producto, cantotal FROM CONSULTA WHERE X_ORDEN=1
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Agrupación de campos

Publicado por Leandro (1 intervención) el 14/06/2011 05:12:39
Muchas gracias Juan Manuel, es lo que estaba necesitando..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de roger

Agrupación de campos

Publicado por roger rogergomez780@hotmail.com (173 intervenciones) el 13/06/2011 12:57:00
creo que sin duda es la solucion correcta, gracias Juan Manuel Cruz
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar