Top 5 Clientes agrupados por meses

Tengo una consulta en la cual me lista el mes, cliente e importe de facturación y me gustaría que el resultado fuera los top 5 de clientes por meses.
Se que estoy lo tengo que hacer vía sql, pero no se como.
Si pongo la instrucción:

Select top 5 mes, cliente, ventas sum ventas as total
from tabla_ventas
group by mes

Esta solo me lista los 5 de mayor facturación pero ese no es el resultado que necesito. Ya que quiero de Enero los 5 primeros, Febrero los 5 primeros y así sucesivamente.

2 respuestas

Respuesta
1

¿Por cuál campo estas ordenando?, porque si estas ordenando ascendente por ventas entonces te arrojará los 5 con mayores ventas.

Lo que debes hacer es incluir un campo fecha no agrupado sino "donde" y es en esa fecha con la que buscas a los 5 primeros clientes que compran un el mes.

Me escribes para saber como te fue.

Buenas,

El campo está ordenador por meses y me devuelve solo los 5 de mayor facturación y lo que pretendo es que me devuelva los 5 mejores de Enero, los 5 mejores de Febrero y así sucesivamente.

Gracias.

Ordena entonces por el campo que suma las ventas. De forma descendente. Me comentas.

Respuesta
1

La cáusula top 5 te da los primeros 5 registros, a secas, nada más.

Cuando haces una consulta de agrupación tienes que indicar todos los campos que no lleven agrupación en la cláusula GROUP BY, debería ser GROUP BY mes, cliente.

Además tendrías que añadir al final:

ORDER BY cliente, mes

Así ordenaría el resultado final según clientes, y para cada uno, por mes.

Perdona porque a lo mejor no me expresé bien.

Lo que hice primero fue una consulta en vista diseño en el que pongo el mes, cliente y ventas. El resultado son muchos clientes por cada mes con su facturación correspondiente.

Lo que hice fue probar después en modo SQL añadir TOP 5 en el select para probar pero eso no es lo que necesito.

Lo que necesito de la consulta es que me devuelva Enero y los 5 clientes de más facturación, Febrero de igual manera y así consecutivamente.

El problema es que no se cual es la instrucción que debo teclear en vista sql o en vista diseño para que me devuelva lo que necesito.

Gracias por tu interés.

Vale

A ver, no es tan sencillo como parece, ya que no siempre ocurre que tengas los mismos clientes como mejores clientes cada mes. Una consulta SQL es algo que tiene que servir para uniformizar, y lo que pides no tiene porque darte un resultado uniforme.

Me explicaré: para tener un resultado por meses lo que más te conviene, bajo mi punto de vista, es una consulta que Access llama de referencia cruzada, es decir, una tabla de doble entrada en la que la primera columna sean los clientes, y el resto sean los meses, pero eso no te da un top 5 a no ser que cada vez muestres un mes. Para obtener varios podrías poner que no te ordene por cliente, sino ascendente cada uno de los meses. Como access ordena de forma secuencial (primero enero, después febrero, después marzo, ...) podrías tener algo similar, pero nunca exacto.

En conclusión: todo parte del concepto de registro, es decir, que un registro es una lista de datos heterogénea, pero que en cada campo lo que hay tiene que ser homogéneo. En enero siempre tendrás datos de enero, en febrero siempre datos de febrero, pero si pretendes ordenar por mes, y resulta que el primer cliente de enero es el segundo de febrero, prevalece el orden de enero, por tanto no te valdría para febrero, ya que, al sacarlo en la misma línea tendría que ser coherente.

Si puedes obtener la información, por ejemplo, para un informe, mes a mes, es decir, cada informe un mes, te puede valer así, sino, no le veo solución.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas