Consulta con columnas con misma variable y varios criterios
Tengo una tabla del tipo de la imagen y querría hacer la consulta que aparece debajo, ¿es posible?. Muchas gracias.
1 Respuesta
Lo puedes hacer perfectamente, con una consulta de referencias cruzadas, aunque personalmente no me gusten. Si tengo tu tabla
Con el asistente creo una consulta de referencias cruzadas tal que
Cuando la abro
¡Muchas gracias! A mí tampoco me gustan mucho las referencias cruzadas. Soy muy novata y cuando he querido luego hacer algo con una consulta de referencias cruzadas se me complica un poco la cosa. ¿No hay otra forma, verdad?. Si no hay otra opción, tu solución funciona :-). Muchas gracias.
Si la hay, pero habría que hacerlo en código VB y por lo que dices, todavía no está muy ducha en él. Por lo que quizá sea peor el remedio que la enfermedad.
¡Gracias!
Estoy trasteando un poco a ver si consigo otra forma de hacerlo, aunque sea con VB porque la tabla que manejo es un poco más complicada y no funcionan bien las referencias cruzadas en todos los casos. De momento no he tenido éxito, pero seguiré intentando y sino crearé tantas consultas con criterio como necesite y listo, aunque sea muy poco elegante.
Arancha, en las consultas de referencias cruzadas puedes poner criterios. Para eso, en la barra de ribbon tienes que pulsar Parámetros y ponerle ahí los ídem que vas a utilizar para establecer criterios.
De todas formas, si pusieras una imagen de la tabla aunque sea con datos inventados podría indicarte como hacerlo en VB.
Muchas gracias Julián. He preparado un ejemplo, a ver si así está más claro lo que quiero. Te comparto una imagen, no veo cómo compartirte el excel. Primero la tabla y después lo que quiero conseguir:
Lo de GNTD significaría: gana/no termina/descalificado. La parte azul de la consulta es la condición, la identificación del orden sería poniendo un _1, _2 y así en los nombres de los campos o algo así. De momento lo tengo solucionado creando 5 consultas, una por cada orden, y luego uniéndolas, así también añado algunos campos de la tabla en la que estarían los datos de la carrera. Lo que estaba probando ahora era rellenar una tabla con sql, pero en cuanto intento poner la condición del orden sin añadir el campo no me funciona.
Igual la solución es hacer varias consultas como he hecho al final y me estoy complicando la vida.
Muchísimas gracias.
¡ Pero eso no es Access ! Por la imagen parece Excel. Skin embargo la pregunta sólo está colgada en el apartado de Microsoft Access.
Quizá sea mejor que le preguntes a Dante Amor, es el mejor de Excel.
¡Gracias! He hecho el ejemplo en excel, pero donde lo estoy intentando es una base de datos en access con un montón de carreras. No sabía poner la salida en access, así que tenía que tirar de otro programa :-)
No te preocupes, lo dejo como lo tengo que funciona. Muchas gracias.
Si tengo la tabla Corredores
La puntuación la he puesto redondeando para no tener que escribir mucho.
Creo una tabla Aux( aunque hay más formas) como
En Orden1 aparecerá el primero de cada carrera, en Orden2 el segundo, etc.
Con esta tabla creo un formulario tabular como el de la imagen donde le añado un botón( aunque podría ser en el evento Al cargar del formulario)
Cuando pulso el botón
El código del evento Al hacer clic del botón es
Private Sub Comando23_Click() DoCmd.SetWarnings False DoCmd.RunSQL "insert into aux(codcarrera) select codcarrera from corredores group by codcarrera" Me.Requery Dim i As Byte DoCmd.GoToRecord , , acFirst For i = 1 To Me.Recordset.RecordCount Orden1 = DLookup("participante", "corredores", "ordenllegada=1 and codcarrera=" & Me.CodCarrera & "") Puntuacion1 = DLookup("puntuacion", "corredores", "ordenllegada=1 and codcarrera=" & Me.CodCarrera & "") Orden2 = DLookup("participante", "corredores", "ordenllegada=2 and codcarrera=" & Me.CodCarrera & "") Puntuacion2 = DLookup("puntuacion", "corredores", "ordenllegada=2 and codcarrera=" & Me.CodCarrera & "") Orden3 = DLookup("participante", "corredores", "ordenllegada=3 and codcarrera=" & Me.CodCarrera & "") Puntuacion3 = DLookup("puntuacion", "corredores", "ordenllegada=3 and codcarrera=" & Me.CodCarrera & "") Orden4 = DLookup("participante", "corredores", "ordenllegada=4 and codcarrera=" & Me.CodCarrera & "") Puntuacion4 = DLookup("puntuacion", "corredores", "ordenllegada=4 and codcarrera=" & Me.CodCarrera & "") Orden5 = DLookup("participante", "corredores", "ordenllegada=5 and codcarrera=" & Me.CodCarrera & "") Puntuacion5 = DLookup("puntuacion", "corredores", "ordenllegada=5 and codcarrera=" & Me.CodCarrera & "") DoCmd.GoToRecord , , acNext Next Me.Requery End Sub
Se podría hacer usando set lbl as control, etc pero creo que sería complicarte más la cosa.
Lo que hace es primero insertar en la tabla AUX los codcarrera (sin repetir) y después Buscar
¡Gracias!
¡Muchas gracias!, ya lo he conseguido, he tenido que repetir varias veces las tablas porque si hacía un cambio parecía que no lo reconocía, pero finalmente funcionó. Lo único es que en la base de datos completa he tenido que poner [ ] en Me.[CodCarrera], puede que si no hubiese cometido ningún error no me hubiera hecho falta, no lo sé, pero ya funciona, ya no toco. Intentaré estudiarme el procedimiento para próximas veces que lo necesite. Muchísimas gracias por tu tiempo y por la solución.
Me.CodCarrera
- Compartir respuesta