Access - Silnm con tres condiciones que se deben dar por el verdadero

 
Vista:
Imágen de perfil de mirta
Val: 7
Ha aumentado su posición en 36 puestos en Access (en relación al último mes)
Gráfica de Access

Silnm con tres condiciones que se deben dar por el verdadero

Publicado por mirta (3 intervenciones) el 26/12/2019 21:17:51
Agradeceré me aclaren por que no me funciona lo siguiente:
tengo una tabla donde declaro [edad] [grado] [condicion] (o sea a cierta edad le corresponde cierto grado y [condición ] establece si cumple años el alumno antes del 30/06 o despues, A o B)
Luego una consulta de "Inscripción por Año". [id_alumno], [fecha_insc], [edad], [grado], [condicion] (A o B).
Lo que quiero lograr es otra consulta que me informe si el alumno esta en edad o excedido.
[fecha_Inscr], [id_alumno], [edad] (segun Inscripcion), [condicion] (segun inscripcion) y un campo donde utilicé la formula silnm.
Excedido: SiInm([inscripcion_por_año]![Edad]=[Año_Grado]![edad],SiInm([inscripcion_por_año]![grado/año]=[Año_Grado]![grado],SiInm([inscripcion_por_año]![clasificacion]=[Año_Grado]![estado],"En edad","ExcedidoI"))

Aclaro: como la tabla año/grado esta descolgada de todo la relacione con la consulta en [edad] [año] [condicion] donde le di la propiedad 3° en "propiedades de Relación".
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

Silnm con tres condiciones que se deben dar por el verdadero

Publicado por Anonimo (3315 intervenciones) el 27/12/2019 12:03:36
Sin entrar en que los datos que se comparan sean compatibles y que se pueda acceder a los datos de referencia (por las descripciones parece que son datos externos a la propia consulta), creo que la solución no esta correctamente planteada …..

La función IIF (traducida : Silnm) hace una comparación (pregunta) que solo admite dos posibles respuestas ==> es cierto / es falso
cada una de esas respuestas se puede sustituir por una pregunta (y sus dos respuestas) … el limite de encadenamiento depende de la versión

Lo que se exige es que se cumplan todas las condiciones (tres afirmaciones) pero la solución plantada no lo hace así, pues plantea la segunda condición si se cumple la primera y la tercera condición 'si no se cumple la PRIMERA' (y el no cumplimiento de la primera implica el final y el rechazo)

Como plantear una posible solución:

Esta_excedido: IIF ([¿La edad esta en el margen?], IIF( [¿el grado es correcto ?], IIF([¿es el semestre correcto?] , "Todo Ok", "el semestre no corresponde "), "grado incorrecto") , "Edad incorrecta")

Las preguntas (condiciones) y las respuestas son inventadas, lo que intentan reflejar es la forma correcta de plantear la solución al problema utilizando la función IIF (y no es la única).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de mirta
Val: 7
Ha aumentado su posición en 36 puestos en Access (en relación al último mes)
Gráfica de Access

Silnm con tres condiciones que se deben dar por el verdadero

Publicado por mirta (3 intervenciones) el 27/12/2019 19:19:03
Entiendo lo que me quisiste decir, lo que sucede es que habría que preguntar desde los 5 años cumpliendo antes del 30/6 ya que cumpliría 6 antes de 1/2 año y eso lo habilita para la inscripción en 1° año hasta los 12 y si los cumplieron antes o después del 30/06 me pareció muy engorroso, habrá otra manera? probé hacer solo eso en un archivo diferente solo esto y algo funcionó pero no me lee un registro antes leia el primero y luego nada mas. Adjunto dicho archivo para que lo vean. Mil gracias por tu respuesta la valoro muchisimo!!

p/d me muestra los en edad y no los excedidos
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 Francisco
Val: 467
Plata
Ha disminuido 1 puesto en Access (en relación al último mes)
Gráfica de Access

Silnm con tres condiciones que se deben dar por el verdadero

Publicado por Francisco (211 intervenciones) el 30/12/2019 15:51:06
Hola


En realidad no hay falta tener un IIF() anidado para evaluar tres condiciones con que apliques AND bastara



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
SELECT
	ALUMNO.edad,
	ALUMNO.año,
	ALUMNO.condicion,
	IIf(
		[ALUMNO]![edad]=[Año_Grado]![edad] And
		[ALUMNO]![año]=[Año_Grado]![grado] And
		[ALUMNO]![condicion]=[Año_Grado]![estado],"En Edad","Excedido") AS Expr1
FROM ALUMNO
	LEFT JOIN Año_Grado
		 ON (ALUMNO.condicion = Año_Grado.estado)
		AND (ALUMNO.año = Año_Grado.grado)
		AND (ALUMNO.edad = Año_Grado.edad)
GROUP BY
	ALUMNO.Id_alumno,
	ALUMNO.edad, ALUMNO.año,
	ALUMNO.condicion,
	IIf(
			[ALUMNO]![edad]=[Año_Grado]![edad]
		And [ALUMNO]![año]=[Año_Grado]![grado]
		And [ALUMNO]![condicion]=[Año_Grado]![estado],"En Edad","Excedido");

Lo segundo es que el INNER te filtra o devuelve aquellos registros que evaluan la condicion como verdadera, pero ALUMNOS en realidad contiene mas registros que en su contraparte no tiene asociatividad, por eso el LEFT JOIN en vez de INNER JOIN esto implica que los registros ALUMNOS se mostrara como excedido.

Me parece que esto no es la solucion optima sin embargo es un punto de partida

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de mirta
Val: 7
Ha aumentado su posición en 36 puestos en Access (en relación al último mes)
Gráfica de Access

Silnm con tres condiciones que se deben dar por el verdadero

Publicado por mirta (3 intervenciones) el 07/01/2020 21:43:25
Gracias Francisco, me dió algunas ideas.
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