CASE CON WHERE IN

25/07/2007 - 13:20 por Cristian Meneses | Informe spam
Hola amigos del foro.
En esta ocasion les consulto de que forma puedo hacer algo parecido a
esto

SELECT
Campo1,
Campo2
FROM MiTabla
WHERE
Campo3 = 0 AND
Campo1 = CASE WHEN @MiVariable = '0' THEN Campo1 ELSE Campo1 IN
(SELECT * FROM TablaExtra) END

Saludos


Cristian Meneses

Preguntas similare

Leer las respuestas

#1 Ricardo Passians
25/07/2007 - 13:39 | Informe spam
Podrías hacer un IF antes.

Ej.

IF @MiVariable = '0'
/* el select sin el IN */
ELSE
/* el select con el IN */


De todos modos para ver si hacerlo en la misma instrucción fuera mejor que
explicaras la idea de esta condición, ya que al menos yo, no la entiendo
bien:

Campo1 = CASE WHEN @MiVariable = '0' THEN Campo1 ELSE Campo1 IN
(SELECT * FROM TablaExtra) END




Saludos
Ricardo Passians




"Cristian Meneses" escribió en el mensaje
news:
Hola amigos del foro.
En esta ocasion les consulto de que forma puedo hacer algo parecido a
esto

SELECT
Campo1,
Campo2
FROM MiTabla
WHERE
Campo3 = 0 AND
Campo1 = CASE WHEN @MiVariable = '0' THEN Campo1 ELSE Campo1 IN
(SELECT * FROM TablaExtra) END

Saludos


Cristian Meneses

Respuesta Responder a este mensaje
#2 Cristian Meneses
25/07/2007 - 16:40 | Informe spam
Hola Ricardo
La idea es ver si se logra hacer todo en una sola sentencia.
En cuanto al concepto de la condicion, la idea es pasar como parametro
un valor del tipo lista con identificadores primarios. En caso que sea
0 se haria un select de todo, caso contrario se buscaria aquellos que
coincidan con la lista pasada por parametro. Ya uso un funcion que me
convierte esta lista en una tabla temporal de manera tal que la
condicion queda algo asi

WHERE
ANULADO = 0 AND
IDTERMINAL IN (SELECT * FROM #AUXTerminales)

Pero dado lo extenso de mi procedimiento preferiria una unica
sentencia como si fuera

WHERE
Anulado = 0 AND
IDTerminal = CASE WHEN @Terminales = '0' THEN IDTerminal ELSE
IDTerminal IN (SELECT * FROM #AUXTerminales) END

pero asi no funciona.
Gracias


Cristian Meneses
Respuesta Responder a este mensaje
#3 Ricardo Passians
25/07/2007 - 16:47 | Informe spam
Bueno, si te entendí, mejor debes usar un OR, y olvida el "CASE...WHEN".

Ej.
WHERE
Anulado = 0 AND (@Terminales = '0' OR IDTerminal IN (SELECT IDTerminal
FROM #AUXTerminales) )


Saludos

Ricardo Passians


"Cristian Meneses" escribió en el mensaje
news:
Hola Ricardo
La idea es ver si se logra hacer todo en una sola sentencia.
En cuanto al concepto de la condicion, la idea es pasar como parametro
un valor del tipo lista con identificadores primarios. En caso que sea
0 se haria un select de todo, caso contrario se buscaria aquellos que
coincidan con la lista pasada por parametro. Ya uso un funcion que me
convierte esta lista en una tabla temporal de manera tal que la
condicion queda algo asi

WHERE
ANULADO = 0 AND
IDTERMINAL IN (SELECT * FROM #AUXTerminales)

Pero dado lo extenso de mi procedimiento preferiria una unica
sentencia como si fuera

WHERE
Anulado = 0 AND
IDTerminal = CASE WHEN @Terminales = '0' THEN IDTerminal ELSE
IDTerminal IN (SELECT * FROM #AUXTerminales) END

pero asi no funciona.
Gracias


Cristian Meneses





"Cristian Meneses" escribió en el mensaje
news:
Hola Ricardo
La idea es ver si se logra hacer todo en una sola sentencia.
En cuanto al concepto de la condicion, la idea es pasar como parametro
un valor del tipo lista con identificadores primarios. En caso que sea
0 se haria un select de todo, caso contrario se buscaria aquellos que
coincidan con la lista pasada por parametro. Ya uso un funcion que me
convierte esta lista en una tabla temporal de manera tal que la
condicion queda algo asi

WHERE
ANULADO = 0 AND
IDTERMINAL IN (SELECT * FROM #AUXTerminales)

Pero dado lo extenso de mi procedimiento preferiria una unica
sentencia como si fuera

WHERE
Anulado = 0 AND
IDTerminal = CASE WHEN @Terminales = '0' THEN IDTerminal ELSE
IDTerminal IN (SELECT * FROM #AUXTerminales) END

pero asi no funciona.
Gracias


Cristian Meneses

Respuesta Responder a este mensaje
#4 Javier Loria
25/07/2007 - 19:06 | Informe spam
Hola Cristian:
Aun cuando se puede hacer en una sola setencia debes tener cuidado
porque podria tener probemas de rendimiento, si la tabla es grande.
La condición puede construirse asi:
==
WHERE Campo3=0
AND CASE WHEN @MiVariable='0' THEN 1
WHEN Campo1 IN (SELECT Campo1 FROM TableExtra) THEN
1
ELSE 0 END=1
== Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

"Cristian Meneses" wrote in message
news:
Hola amigos del foro.
En esta ocasion les consulto de que forma puedo hacer algo parecido a
esto

SELECT
Campo1,
Campo2
FROM MiTabla
WHERE
Campo3 = 0 AND
Campo1 = CASE WHEN @MiVariable = '0' THEN Campo1 ELSE Campo1 IN
(SELECT * FROM TablaExtra) END

Saludos


Cristian Meneses

Respuesta Responder a este mensaje
#5 Cristian Meneses
25/07/2007 - 21:50 | Informe spam
Muchas gracias Javier Loria, era justo lo que buscaba y me funciono de
maravillas.
Saludos

Cristian Meneses
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida