Access - Se pueden limitar registros en una consulta en función de una variable??

   
Vista:

Se pueden limitar registros en una consulta en función de una variable??

Publicado por Jesús Manuel (134 intervenciones) el 14/04/2014 18:19:13
No estoy seguro de si se puede hacer en una consulta y estoy seguro de que no se como hacerlo, resumiendo tengo lo siguiente:

- Tabla: expedientes
- Campos: ID, Puntuacion, Presupuesto

Quiero hacer una consulta que me liste los expedientes con puntuación igual o superior a 50 y que la suma de los presupuestos no pase de 10000

En una segunda consulta listar los expedientes con puntuación igual o superior a 50 y que se hayan quedado fuera de la consulta anterior

Ejemplo:

ID - Puntuacion - Presupuesto
1 55 1250
2 66 3750
3 77 4500
4 52 1250
5 50 1000
6 49 3200


La primera consulta me mostraría los expedientes con ID 3, 2 y 1 (en este orden) ya que son los de mayor puntuación y sus presupuestos no superan los 10000.

La segunda consulta me mostraría los expedientes con ID 4 y 5 (en este orden) ya que aún superando los 50 puntos, con sus presupuestos se superarían los 10000.


Es posible hacer esto con consultas? Podrían indicarme como?
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 Neckkito

Se pueden limitar registros en una consulta en función de una variable??

Publicado por Neckkito (1104 intervenciones) el 14/04/2014 22:18:41
Hola!

Hasta donde yo sé lo que pides, sólo con consultas, no es posible. Estás pidiendo dos cosas inicialmente contradictorias: un detalle individualizado y un agrupamiento de totales.

Para hacer lo que pides necesitas un paso intermedio, que es conseguir, digámoslo así, unos "agrupados individuales". Y eso se consigue a través de VBA.

Si quieres saber cómo se hace me lo comentas y te lo explico.

Un saludo,

http://neckkito.siliconproject.com.ar
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

Se pueden limitar registros en una consulta en función de una variable??

Publicado por Jesús Manuel (134 intervenciones) el 14/04/2014 22:59:54
A que te refieres con los "agrupados individuales"?
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 Neckkito

Se pueden limitar registros en una consulta en función de una variable??

Publicado por Neckkito (1104 intervenciones) el 14/04/2014 23:05:59
Necesitas saber el saldo agrupado que se produce en cada registro. Es decir:

Id - Saldo agrupado (o acumulado)
3 - 4500
2 - 8250
1 - 9500
4 - 10750
etc

Fíjate que ya te pongo los resultados en el orden en que se obtendrían sólo según la puntuación.

Para poder discriminar después por los inferiores a 10000 y resto necesitarías la información de lo que yo he llamado agrupado individual, que es en realidad el acumulado del registro en concreto más todos los anteriores.

Saludos,

Neckkito
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

Se pueden limitar registros en una consulta en función de una variable??

Publicado por Jesús Manuel (134 intervenciones) el 14/04/2014 23:39:02
He estado buscando en la web por "acumulado de registros access" y me he encontrado con este ejemplo para consultas http://support.microsoft.com/kb/208714/es

No vine siendo lo que me has comentado, pero en este caso para utilizar en consultas? No dispongo de access ahora para hacer una prueba pero voy a ver que obtengo mañana en el trabajo.

Muchas gracias por la ayuda y comentare los resultados.
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 Neckkito

Se pueden limitar registros en una consulta en función de una variable??

Publicado por Neckkito (1104 intervenciones) el 15/04/2014 08:20:01
Hola, Jesús Manuel:

He echado un vistazo al link que proponías y, efectivamente, la sistemática que propone te permite la realización de lo que pides a través de consultas.

Como te veo "a tope" con este tema no te daré la solución porque me da la sensación de que estás interesado en sacarlo por ti mismo. Sin embargo, permíteme un par de "pistillas":

- En el link se utiliza el campo identificador para conseguir los resultados. A ti no te va a servir ese campo. Debes utilizar otro.

- Ese "otro" campo que sí te puede servir requiere que los resultados se muestren cumpliendo una condición...

A ver si lo puedes sacar. Si no me lo comentas y te doy más pistas o, directamente, la solución

Un saludo,

Neckkito
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

Se pueden limitar registros en una consulta en función de una variable??

Publicado por Jesús Manuel (134 intervenciones) el 15/04/2014 17:45:42
Gracias por las pistillas y por no resolverlo directamente.

A las pistillas ya había llegado, de hecho ahora lo tengo así:


SELECT EXPEDIENTES.ID, EXPEDIENTES.PUNTUACION, EXPEDIENTES.PRESUPUESTO, Format(DSum("[PRESUPUESTO]","[EXPEDIENTES]","[PUNTUACION]>=" & [PUNTUACION] & " "),"currency") AS ACUMULADO
FROM EXPEDIENTES
WHERE (((EXPEDIENTES.PUNTUACION)>50))
ORDER BY EXPEDIENTES.PUNTUACION DESC;




Creo que con el código SQL si alguien quiere probar es más fácil para ver la consulta luego.


Ahora el problema esta en que para campos con la misma puntuación, hace la suma acumulada de estos registros con la misma puntuación e indica la suma para estos registros.

Esto implica que si al final tengo un sobrante de 500 para llegar a mi tope (que en el ejemplo estaba en 10000) y tengo 6 registros con 51 puntos y 150 de presupuesto cada uno, ninguno de los 6 entraría en la primera consulta, cuando en realidad 3 de ellos si tendrían que hacerlo y quedarme con un sobrante de 50 con respecto al tope (500-(150x3)=50)

Ademas ahora no solo tengo la puntuación total que yo he llamado PUNTUACION, tambien tengo 5 puntuaciones parciales que llamare P1, P2, P3, P4 y P5 como campos en mi tabla.

En caso de empate en la PUNTUACION el orden de desempate es el que tenga P1 mayor y en caso de empate el que tenga P2 mayor y en caso de empate ...

Se que podría pasar de todo, exportar la consulta a excel y allí con facilidad calcular el acumulado (sin los problemas de que la puntuación sea igual y luego ver que registros copiar por un lado y cuales por el otro), pero suelo ser testarudo unos cuando días cuando me pongo con algo y aún no han pasado 24 horas :)
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

Se pueden limitar registros en una consulta en función de una variable??

Publicado por Jesús Manuel (134 intervenciones) el 15/04/2014 20:49:31
No han sido días, pero me he pasado la tarde buscando una solución y todos los caminos me llevan a lo mismo, que el campo de criterio no se repita en la función DSUM, hasta he encontrado como poner un autonumérico en una consulta, pero luego no supe sacarle rendimiento.

Podrías indicarme como continuar o que modificar en el código de antes para poder hacer la suma continua en función de la PUNTUACIÓN???
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 Neckkito

Se pueden limitar registros en una consulta en función de una variable??

Publicado por Neckkito (1104 intervenciones) el 16/04/2014 08:17:35
Hola, Jesús Manuel:

Veamos...

He estado husmeando por ahí a ver si encontraba alguna "fórmula mágica" o, al menos, alguna idea que me sirviera de inspiración para poder solventar tu problemilla con la autonumeración de la consulta. Lamentablemente, y si nos ceñimos a que todo deba ser a través de consultas, no he podido encontrar ninguna solución. Más tarde o más temprano se requiere programación con VBA.

Por otra parte el sistema de acumulados, lo cojas por donde lo cojas, requiere que no se repitan los valores. Si se repiten... malo. Deja de funcionar como queremos.

Supongamos que vamos a hacer lo máximo posible a través de consultas. Aquí aparecen varios "problemas":

- Para programar la numeración sobre la consulta se requiere VBA.
- El sistema de numeración debe basarse en los datos de una tabla. ¿Qué implica eso? Que la numeración se produce sobre el orden en que están los registros en la tabla. Aunque tú ordenes la consulta según los criterios que quieras al final la ordenación siempre me ha salido coincidente con el "Id" original, lo cual no sirve para nada
- Lo anterior implica que se debe crear una tabla auxiliar, que a su vez implica que cada vez debe crearse dicha tabla auxiliar para tener los datos actualizados.
- Y, por más que he intentado resumirlo, no he sido capaz de conseguir que con una tabla auxiliar baste, así que se requiere una segunda tabla auxiliar.
- Para crear esas tablas auxiliares (y asegurarte de que la información final está actualizada) tenemos dos maneras: o lo haces a mano o dejas que VBA lo haga por ti.

La parte positiva de lo anterior es que las SQL de las consultas se simplifican bastante.

Al final he optado por prepararte un ejemplo en el cual te propongo dos sistemas para llegar al mismo resultado: uno a través de consultas y código VBA (imprescindible al menos en parte) y otro sistema directamente a través de VBA (diría "casi" directamente, dado que también se requiere una tabla auxiliar. De todas maneras verás que es bastante más simple). Ahí lo tienes: https://www.mediafire.com/?n31mhyyq7q4iho1

Ten en cuenta que si utilizas más criterios de ordenación deben plasmarse también en ambos sistemas. Yo sólo te lo he hecho en función de la puntuación.

Y poca cosa más. Si tienes alguna duda me comentas.

Saludos,

Neckkito
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

Se pueden limitar registros en una consulta en función de una variable??

Publicado por Jesús Manuel (134 intervenciones) el 16/04/2014 09:22:44
Muchas gracias.

Yo había conseguido ordenar la consulta con un ID con al función que tu utilizas en la opción 1, pero me faltaba crear una tabla nueva para poder sacarle partido.

Estudiare las dos opciones con calma.
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

Se pueden limitar registros en una consulta en función de una variable??

Publicado por Jesús Manuel (134 intervenciones) el 25/04/2014 10:41:13
Una valoración sobre mi experiencia con el ejemplo que me has facilitado:

- Lo primero indicar que la tabla de origen es más completa que los 3 campos indicados, por lo que las consultas que he creado tienen más campos que los que se ven en el ejemplo.

- He creado una nueva consulta de creación de tabla (CConcedidos que crea T3) para tener en una tabla nueva lo que sería el resultado de CMenores10000 para filtrar los expedientes concedidos por un campo categoría.

- He añadido código a los botones para que cierre una consulta antes de abrir la otra (solo las consultas relacionadas con T1,T2 y T3), ya que tenía un mensaje de error al estar las tablas abiertas por otro proceso.

- Cerrar las consultas antes de cerrar la base, porque si alguna de las consultas relacionadas con las tablas T1,T2 y T3 estaba abierta tenía un error al cerrar la base y estas tablas no se eliminaban.


Como ves pequeños detalles que he visto sobre la marcha.

Muchas gracias por la ayuda.
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 Neckkito

Se pueden limitar registros en una consulta en función de una variable??

Publicado por Neckkito (1104 intervenciones) el 25/04/2014 11:24:50
Hola, Jesús Manuel:

Te agradezco mucho tus últimas palabras, tanto para mí como para quien pueda encontrar útil el ejemplo.

Como bien comentas un código simple normalmente funciona bien en cualquier BD; una sistemática o código más complejos ya empieza de pendender de las características de la BD en la que se esté ejecutando. Es decir, que en algunas BD's puede funcionar a la primera y en otras hay que hacer ajustes (como los que comentas) para que el conjunto del sistema te funcione como quieres.

Por eso me sonrío un poco (sin mala intención, por supuesto) cuando alguien presenta una consulta diciendo algo así como "he copiado este código y no funciona en mi base de datos..."

Pero bueno... probar y probar, corregir y corregir...ahí está la gracia de Access, ¿no?

Un cordial saludo,

Neckkito
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