Access - Utillizar campo renombrado con AS en cláusula WHERE

   
Vista:

Utillizar campo renombrado con AS en cláusula WHERE

Publicado por Ana (80 intervenciones) el 26/05/2011 13:43:08
Hola a todos,

Estoy interesada en encontrar registros de una tabla que tienen valores diferentes en dos campos de la tabla. Por ejemplo, si ejecuto la consulta:

SELECT Id from Tabla1 where Campo1 <> Campo2

se muestran correctamente los Id's de los registros cuyos valores en las columnas Campo1 y Campo2 son diferentes.

Imaginemos ahora que he seleccionado valores un poco más complicados:
SELECT Id, IIF(IsNULL(Campo1),0,Campo1) as C1, IIF(IsNull(Campo2),0,Campo2) as C2 from Tabla1

Ahora estoy interesada en recoger los registros cuyos valores C1 y C2 son diferentes, pero si añado a la instrucción anterior la cláusula "WHERE C1<> C2" no funciona (me solicita valores para C1 y C2, entendiendo que son parámetros)

¿Sabéis cómo se puede hacer esto?

Muchas gracias.
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

Utillizar campo renombrado con AS en cláusula WHERE

Publicado por angelessebas (208 intervenciones) el 26/05/2011 14:26:00
Hola,

¿Has probado a poner en la clausula where:

IIF(IsNULL(Campo1),0,Campo1)<>IIF(IsNull(Campo2),0,Campo2) ?

Sino tendrías que hacer otra consulta basada en la que tienes, en esta nueva los campos C1 y C2 si actuan como campos. Tienes que tener en cuenta que una consulta de selección actua exactamente igual que una tabla.

Me cuentas, saludos Angeles

http://angelessebas.es/
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

Utillizar campo renombrado con AS en cláusula WHERE

Publicado por Ana (80 intervenciones) el 26/05/2011 14:46:26
Muchísimas gracias por ser tan rápida, Angeles.
Pues para la consulta ejemplo que he puesto, efectivamente funciona sustituir C1 y C2 por sus valores IIF... El problema es que he simplificado mucho la pregunta con respecto a mi situación real:
Lo cierto es que cada IIf tiene un par de IIF anidados en el interior basados en otros campos seleccionados en la consulta, y si tengo que escribir todo en la cláusula where queda un galimatías importante.
No sé muy bien a qué te refieres con tu otra sugerencia, la de la consulta basada en la que tengo en la que C1 y C2 actúan como campos. ¿Serías tan amable de ponerme un ejemplo sencillo?
Muchas gracias.
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

Utillizar campo renombrado con AS en cláusula WHERE

Publicado por angelessebas (208 intervenciones) el 26/05/2011 14:52:08
Hola,
a lo que me refiero es que a la consulta que tienes la llamas por ejemplo consulta1 y te creas otra:

Select * from consulta1 where c1<>c2

Es decir utilizas la consulta como tabla.

Me cuentas, saludos Angeles

http://angelessebas.es/
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

Utillizar campo renombrado con AS en cláusula WHERE

Publicado por Ana (80 intervenciones) el 27/05/2011 12:41:19
Muchas gracias, Angeles.
Así funciona perfectamente.
Por si alguien más tiene el mismo problema, he encontrado información que dice que no es posible usar un alias de un campo en una cláusula WHERE, puesto que aún no se ha resuelto el alias en el momento de ejecutarse la condición. La misma documentación dice que sí puede utilizarse dentro de una cláusula HAVING en combinación con un GROUP BY, pero yo no lo he probado.

Un saludo,
Ana.
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