Access - Devolver los n primeros registros de cada grupo en una consulta agrupada

 
Vista:
sin imagen de perfil

Devolver los n primeros registros de cada grupo en una consulta agrupada

Publicado por paco (2 intervenciones) el 30/01/2017 13:42:42
Buenas, plateo la siguiente duda:

Tengo una tabla con las ventas, en la que estan todos los articulos vendidos.

Cada articulo pertenece a una familia, por ejemplo de la familia 1 a la 10.

Lo que busco conseguir en una sola consulta, que me muestre solo los 5 articulos mas vendidos agrupados por familia.

La consulta que uso ahora hace lo que quiero, pero me devuelve todos los articulos de todas las familias y no soy capaz a idear un sistema para que devuelva los n primeros de cada agrupación.

Gracias por adelantado.

Un saludo.
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
Imágen de perfil de Manuel
Val: 395
Bronce
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Devolver los n primeros registros de cada grupo en una consulta agrupada

Publicado por Manuel (171 intervenciones) el 31/01/2017 11:16:40
No das info de la estructura de tablas, ni ejemplo de datos, pero lo que pides es fácil si la estructura de tablas es correcta, deberías subir un MDB con la estructura (y si es posible algunos ejemplos). Pero te intentaré explicar como:

Lo primero es que sobreentiendo que la tabla de línea de ventas será algo por el estilo:
idLinea, idProducto, idFamilia,Cantidad, Precio...

Segundo, si no hay un campo del estilo de cantidad porque se vende de 1 en uno, lo que mostraré después deberías cambiar SUM por COUNT y nada más.

Tercero, para quede más descriptivo seguro que tendrás varias tablas, etc... pero como no cambia lo fundamental (y tampoco tengo la estructura de tablas), pues no lo hago.

Mas o menos sería algo así (lo estoy haciendo de cabeza solo para darte la idea):

1
2
3
4
5
6
7
8
9
10
11
SELECT idProducto, SUM(Cantidad) AS tventas, idFamilia´
 FROM líneas WHERE idProducto
IN
(SELECT  limitador.idProcuto
FROM (SELECT TOP 5 lin.idProducto, SUM (lin.Cantidad) as ventas, lin.idFamilia
FROM líneas AS lin
WHERE idFamilia=lin.idFamilia
GROUP BY lin.idProducto
 ORDER BY lin.ventas ) AS limitador
 WHERE limitador.idFamilia=lineas.idFamilia)
 GROUP BY idProducto

En cristiano, limitamos en el Where gracias a una subconsulta (en este caso con otra subconsulta dentro) a los 5 elementos más vendidos de cada familia.

Pero es solo una idea, si subes el diseño de las tablas con unos ejemplos de datos, pues te la hago la correcta.

Buen día
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