La página Web de Emilio Sancha - MVP 2006/11
La página Web de Emilio Sancha

Inicio    |   Access    |   Excel    |    Visual Script    |   Enlaces    |   Búsquedas    |   Apuntes    |   Libro de Visitas

Suscripcion RSS

Función Partition

A petición de un gran amigo, de frágil memoria ;-)) he preparado este breve apunte sobre el uso de Partition, una casi desconocida función VBA que nos permite saber en que rango se encuentra un dato de una tabla. Mas información en http://office.microsoft.com/es-es/access-help/particion-funcion-HA001228892.aspx y por supuesto en la ayuda.

De este modo, con una consulta como la siguiente


SELECT IdPedido, Importe, Partition([Importe],0,15000,500) AS Tramo
FROM qryPedidos


obtendremos un resultado como este

Id. de pedido Importe Tramo
10808 1410,99999010563 1000: 1499
10809 140 0: 499
10810 187 0: 499
10811 852 500: 999
10812 1692,79999762774 1500: 1999
10813 602,399999320507 500: 999
10814 1788,44998881221 1500: 1999
10815 40 0: 499

No es que sea muy bonito pero si que puede ser útil, si además lo agrupamos podemos sacarle mucho mas partido


SELECT Partition([Importe],0,15000,500) AS Tramo, Count(Importe) AS CuentaDeImporte
FROM qryPedidos
GROUP BY Partition([Importe],0,15000,500)


nos devolverá el número de registros, en este caso pedidos, que se encuentran en cada uno de los tramos, los tramos los hemos establecido al llamar a la función Partition, al decirle que los datos se mueven de 0 a 15000 y que tienen un tamaño de 500, por cierto, observad que como por otra parte es lógico, solo devuelve aquellos tramos en que hay registros.

Tramo CuentaDeImporte
0: 499 9
500: 999 20
1000: 1499 7
1500: 1999 5
2000: 2499 2
2500: 2999 5
3500: 3999 2
4500: 4999 3
8000: 8499 1
10500:10999 1

Lo cierto es que el resultado no es muy estético, pero eso tiene fácil remedio


SELECT Left(Tramo, InStr(Tramo,":")-1) AS Desde, Mid(Tramo, InStr(Tramo,":")+1) AS Hasta, Consulta.CuentaDeImporte AS Cuenta
FROM (SELECT Partition([Importe],0,15000,500) AS Tramo, Count(Importe) AS CuentaDeImporte
FROM qryPedidos
GROUP BY Partition([Importe],0,15000,500)) AS Consulta


Desde Hasta Cuenta
0 499 9
500 999 20
1000 1499 7
1500 1999 5
2000 2499 2
2500 2999 5
3500 3999 2
4500 4999 3
8000 8499 1
10500 10999 1


Ah, casi se me olvida, qryPedidos ataca a Neptuno, tablas Pedidos y Detalles de Pedidos y es así

SELECT Pedidos.IdPedido, Clientes.NombreCompañía, Sum([Cantidad]*[PrecioUnidad]*(1-[Descuento])) AS Importe, Year([FechaPedido]) AS Año, Month([FechaPedido]) AS Mes
FROM (Clientes INNER JOIN Pedidos ON Clientes.IdCliente = Pedidos.IdCliente) INNER JOIN [Detalles de pedidos] ON Pedidos.IdPedido = [Detalles de pedidos].IdPedido
GROUP BY Pedidos.IdPedido, Clientes.NombreCompañía, Year([FechaPedido]), Month([FechaPedido])
HAVING (((Year([FechaPedido]))=1998) AND ((Month([FechaPedido]))=1))

 
Ultima Revisión Viernes, 02-Dic-2011 22:15
 

  • NOTA: La información contenida en esta página, así como el código fuente incluido en la misma, se proporciona TAL CUAL, sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo explicado, recomendado o sugerido en la presenta página.

    This page is provided AS IS with no warranties, and confers no rights. You assume all risk for your use.

    Ultima actualización:  Sábado, 15 de Octubre de 2016
    © Emilio Sancha 2.004-2.016