IIF - CASE

10/07/2007 - 09:10 por Wyoming | Informe spam
Buenas, soy muy novato en esto, a ver si alguien pudiera echarme una
mano.

Tengo hecha una consulta en Access cuyo código es el siguiente:

SELECT USU.USUNOM, USU.USUDES, cliente.ID_CLIENTE,
cliente.descripcion, [NOVEDADES ESO].ISBN, [NOVEDADES
ESO].descripcion, Sum(LINEAS.alumnos) AS USUARIOS, NIVEL.DescNivel AS
NIVEL_LIBRO, NIVEL_1.DescNivel AS NIVEL_ARGOS, IIf([NOVEDADES ESO]!
[ID_NIVEL]=[LINEAS]![ID_NIVEL],"VERDADERO","FALSO") AS COINCIDENCIA
FROM ((((LINEAS INNER JOIN [NOVEDADES ESO] ON LINEAS.ID_ISBN [NOVEDADES ESO].ID_ISBN) INNER JOIN cliente ON LINEAS.ID_CLIENTE cliente.ID_CLIENTE) INNER JOIN USU ON cliente.agente = USU.USUNOM)
INNER JOIN NIVEL ON [NOVEDADES ESO].ID_NIVEL = NIVEL.ID_NIVEL) INNER
JOIN NIVEL AS NIVEL_1 ON LINEAS.ID_NIVEL = NIVEL_1.ID_NIVEL
WHERE (((LINEAS.Definitivo)=-1))
GROUP BY USU.USUNOM, USU.USUDES, cliente.ID_CLIENTE,
cliente.descripcion, [NOVEDADES ESO].ISBN, [NOVEDADES
ESO].descripcion, NIVEL.DescNivel, NIVEL_1.DescNivel, IIf([NOVEDADES
ESO]![ID_NIVEL]=[LINEAS]![ID_NIVEL],"VERDADERO","FALSO");

Si os copiáis este código en la vista SQL de Access veréis que es una
consulta muy sencillita (yo es que si no la veo gráficamente no me
entero)

La parte que me interesa es la de la Condición: IIf([NOVEDADES ESO]!
[ID_NIVEL]=[LINEAS]![ID_NIVEL],"VERDADERO","FALSO") AS COINCIDENCIA

Según me han dicho, la Condición IIf de Access se puede hacer mediante
CASE en SQL pero por más que lo intento, siempre me da error.

El código en SQL, con el CASE incluido, lo he escrito de la siguiente
manera:

SELECT dbo.USU.USUNOM, dbo.USU.USUDES,
dbo.cliente.ID_CLIENTE, dbo.cliente.descripcion,
dbo.NOVEDADES_ESO.ISBN,
dbo.NOVEDADES_ESO.descripcion AS TÍTULO,
SUM(dbo.LINEAS.alumnos) AS ALUMNOS,
dbo.NIVEL.DescNivel AS NIVEL_LIBRO,
NIVEL1.DescNivel AS NIVEL_ARGOS
CASE WHEN dbo.NOVEDADES_ESO.ID_NIVEL = dbo.NIVEL.ID_NIVEL THEN
'VERDADERO' ELSE 'FALSO' END AS COINCIDENCIA
FROM dbo.cliente INNER JOIN
dbo.LINEAS ON
dbo.cliente.ID_CLIENTE = dbo.LINEAS.ID_CLIENTE INNER JOIN
dbo.NOVEDADES_ESO ON
dbo.LINEAS.ID_ISBN = dbo.NOVEDADES_ESO.ID_ISBN INNER JOIN
dbo.NIVEL NIVEL1 ON
dbo.LINEAS.ID_NIVEL = NIVEL1.ID_NIVEL INNER JOIN
dbo.USU ON
dbo.cliente.agente = dbo.USU.USUNOM INNER JOIN
dbo.NIVEL ON
dbo.NOVEDADES_ESO.ID_NIVEL = dbo.NIVEL.ID_NIVEL
WHERE (dbo.LINEAS.Definitivo = 1)
GROUP BY dbo.USU.USUNOM, dbo.USU.USUDES,
dbo.cliente.ID_CLIENTE, dbo.cliente.descripcion,
dbo.NOVEDADES_ESO.ISBN,
dbo.NOVEDADES_ESO.descripcion, dbo.NIVEL.DescNivel,
NIVEL1.DescNivel

Cuando le doy al botoncito de comprobar la sintaxis SQL me da el
siguiente error:
"El diseñador de consultas encontró un error de MS Design Tools: Error
de ADO: Sintaxis incorrecta cerca de la palabra clave 'CASE'. No se
puede preparar la instrucción o instrucciones. No se pudo completar
una acción aplazada".

¿qué estoy haciendo mal? (Lo único que necesito es saber cómo
transformar el IIf del SELECT y el del WHERE, con el resto no tengo
problemas)

Muchas gracias,

Jaime
 

Leer las respuestas

#1 Carlos M. Calvelo
10/07/2007 - 09:59 | Informe spam
Wyoming,

A ver... recorto todo lo sobra en tu post:

On 10 jul, 09:10, Wyoming wrote:
.

Tengo hecha una consulta en Access cuyo código es el siguiente:

... AS NIVEL_ARGOS, IIf

El código en SQL, con el CASE incluido, lo he escrito de la siguiente
manera:

... AS NIVEL_ARGOS CASE

... Sintaxis incorrecta cerca de la palabra clave 'CASE'.



Saludos,
Carlos

Preguntas similares