Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Case dentro de un Where

Estas en el tema de Case dentro de un Where en el foro de SQL Server en Foros del Web. Hola, Quiero hacer una consulta que devuelva los resultados dependiendo si la variable mes que le paso como parámetro es par o impar. He intentado ...
  #1 (permalink)  
Antiguo 06/07/2011, 11:16
 
Fecha de Ingreso: septiembre-2010
Mensajes: 7
Antigüedad: 13 años, 7 meses
Puntos: 0
Case dentro de un Where

Hola,

Quiero hacer una consulta que devuelva los resultados dependiendo si la variable mes que le paso como parámetro es par o impar. He intentado hacer lo siguiente:
SELECT *
FROM [GastosxConsorcio]
WHERE
CASE WHEN @Mes % 2 = 0 THEN
[COLOR="rgb(65, 105, 225)"] ((@Mes = [GastosxConsorcio].[Mes] and @Anio = [GastosxConsorcio].[Anio])[/COLOR]
OR
([GastosxConsorcio].[Frecuencia] = 1)
OR
([GastosxConsorcio].[Frecuencia] = 2 and [GastosxConsorcio].[EsPar] = 1))
ELSE
((@Mes = [GastosxConsorcio].[Mes] and @Anio = [GastosxConsorcio].[Anio])
OR
([GastosxConsorcio].[Frecuencia] = 1)
OR
([GastosxConsorcio].[Frecuencia] = 2 and [GastosxConsorcio].[EsPar] = 0))
END

Obtengo el siguiente error cuando clic en el tilde para analizar la consulta. Error:

Msg 102, Level 15, State 1, Procedure GastosxConsorcioSelect, Line 35
Incorrect syntax near '='.
  #2 (permalink)  
Antiguo 06/07/2011, 11:26
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Case dentro de un Where

Y si lo haces asi:
select
CASE WHEN @Mes % 2 = 0 THEN
[COLOR="rgb(65, 105, 225)"] ((@Mes = [GastosxConsorcio].[Mes] and @Anio = [GastosxConsorcio].[Anio])[/COLOR]
OR
([GastosxConsorcio].[Frecuencia] = 1)
OR
([GastosxConsorcio].[Frecuencia] = 2 and [GastosxConsorcio].[EsPar] = 1))
ELSE
((@Mes = [GastosxConsorcio].[Mes] and @Anio = [GastosxConsorcio].[Anio])
OR
([GastosxConsorcio].[Frecuencia] = 1)
OR
([GastosxConsorcio].[Frecuencia] = 2 and [GastosxConsorcio].[EsPar] = 0))
END
from [GastosxConsorcio]
No te sirve??
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 06/07/2011, 11:28
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Case dentro de un Where

Yo decia que el END estaba mal ubicado, porque segun esto, va despues del WHERE.....
__________________
MCTS Isaias Islas
  #4 (permalink)  
Antiguo 06/07/2011, 12:38
 
Fecha de Ingreso: septiembre-2010
Mensajes: 7
Antigüedad: 13 años, 7 meses
Puntos: 0
Respuesta: Case dentro de un Where

Libras, gracias pero no me sirve.
iislas, ¿cómo que esta mal ubicado? Esta despues del Where.

Gracias.
  #5 (permalink)  
Antiguo 06/07/2011, 14:41
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Case dentro de un Where

Si lees un poco sobre el CASE, la sentencia es:

SELECT (CASE 2 WHEN 1 THEN "one" WHEN 2 THEN "two" ELSE "more" END) as ANS

Comparalo con el tuyo, de forma intermedia, hay algunos AND y OR, creo que ese es el problema.
__________________
MCTS Isaias Islas

Etiquetas: case
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:15.