SQL - If - CASE

 
Vista:

If - CASE

Publicado por Jaime (4 intervenciones) el 06/07/2007 11:07:15
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.

¿Cómo quedaría esta consulta en código SQL? (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
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

RE:If - CASE

Publicado por Isaias (5072 intervenciones) el 06/07/2007 20:57:31
Prueba esto:

CASE WHEN NOVEDADES ESO]![ID_NIVEL]=[LINEAS]![ID_NIVEL] THEN 'VERDADERO' ELSE 'FALSO' END AS COINCIDENCIA
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

RE:If - CASE

Publicado por Jaime (4 intervenciones) el 09/07/2007 09:23:34
Gracias, Isaías.

Ya había intentado con algo así pero no me funciona. No sé si es porque no lo coloco en la sección correcta, porque no hago bien la referencia a las tablas o qué es lo que pasa.

Te pongo el código tal como lo tengo en SQL con el CASE incluido (Sin meter el CASE, la consulta funciona bien) para que puedas ver dónde y cómo lo he puesto.

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".

Ahí queda la cosa. Si ves por qué puede ser el error te lo agradecería mucho.
Un saludo,

Jaime
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

RE:If - CASE

Publicado por Isaias (5072 intervenciones) el 09/07/2007 19:57:54
A ver si con esto te ayuda:

http://ewbi.blogs.com/develops/2006/02/adding_case_to_.html
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

RE:If - CASE

Publicado por Jaime (4 intervenciones) el 10/07/2007 08:50:52
Pues la verdad es que no me ayuda mucho...
La teoría básica más o menos la entiendo. Si sólo hay un SELECT y un CASE la cosa es muy sencilla, pero no consigo encontrar ejemplos por ningún lado de la utilización de CASE cuando hay INNER JOIN.

No sé si es que no pongo el CASE en el lugar correcto o qué es lo que estoy haciendo mal. El problema es que estoy muy verde en todo esto.
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

RE:If - CASE

Publicado por El Master (1 intervención) el 25/07/2007 22:54:30
Hola brother:

Pareces nuevo, el error que veo a simple vista es que antes de case no hay coma(,) y si despues de eso sigue saliendo error, despues del END de case quitale el AS y si despues sigue saliendo error, Access no soporta el case, realmente no lo se porque no uso BD tan pobres

Saludos
Tu papi
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

RE:If - CASE

Publicado por un argentino (1 intervención) el 12/09/2007 15:14:28
master: con todo respeto, sos un forraso, das asco.
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

RE:If - CASE

Publicado por Jaime (4 intervenciones) el 13/09/2007 07:46:53
Gracias por tu comentario, argentino...
De hecho yo dejé un comentario similar (bueno, bastante más largo) pero el Master me lo borró.
Parece que no acepta bien las críticas.

Un saludo

Jaime

P.D: Por cierto, en un foro de los grupos de Google me ayudaron a resolver el problema estupendamente
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