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

Respuesta
1

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

Si el nombre va todo junto, en VB no hace falta encerrarlo entre corchetes, por ejemplo me. Nombrecliente

Pero si el nombre es separado si que hay que encerrarlo entre corchetes o comillas, por ejemplo

me.[nombre cliente]

Selec "nombre cliente" from...

¡Gracias! Pues puede ser que en una de las versiones me equivoqué y lo puse separado, luego lo junté. Muchas gracias por la aclaración, es muy útil.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas