where con Case

22/01/2004 - 17:18 por Aragorn \(CL\) | Informe spam
Hola a todos, estoy tratando de realizar un where con un case, no sé si se
pueda hacer...


por ejemplo mi variable @a puede tener 1 o 2 . como puedo hacer que cuando
sea 1 me filtre por el campo TitleOfCourtesy y en caso de que la variable
sea 2 me filtre por el campo Region.


Se que este query esta malo, pero es para representar la idea.


declare @a numeric(1,0)

Set @a = 2

Select *
from dbo.Employees
Where (Case @a
When 1 Then TitleOfCourtesy = 'Ms.'
When 2 Then Region= 'WA'
End)


Gracias.

Aragorn.

Preguntas similare

Leer las respuestas

#1 Manuel \(Salamanca\)
22/01/2004 - 17:49 | Informe spam
Hola,
Yo lo haría con un if:

if @= 1
Select *
from dbo.Employees
Where TitleOfCourtesy = 'Ms.'
else if @=2
Select *
from dbo.Employees
Where Region= 'WA'

De todas formas revisa los BOL, creo que el Case no se puede utilizar en el
where. Solamente en la Select.

Espero haberte ayudado.
Saludos.



"Aragorn (CL)" escribió en el mensaje
news:
Hola a todos, estoy tratando de realizar un where con un case, no sé si se
pueda hacer...


por ejemplo mi variable @a puede tener 1 o 2 . como puedo hacer que cuando
sea 1 me filtre por el campo TitleOfCourtesy y en caso de que la variable
sea 2 me filtre por el campo Region.


Se que este query esta malo, pero es para representar la idea.


declare @a numeric(1,0)

Set @a = 2

Select *
from dbo.Employees
Where (Case @a
When 1 Then TitleOfCourtesy = 'Ms.'
When 2 Then Region= 'WA'
End)


Gracias.

Aragorn.


Respuesta Responder a este mensaje
#2 Javier Loria
22/01/2004 - 17:51 | Informe spam
Hola:
La sintaxis es:
==SELECT *
FROM Employees
WHERE (CASE
WHEN ((@a=1) AND (TitleOfCourtesy = 'Ms.'))
THEN 1
WHEN ((@a=2) AND (Region= 'WA'))
THEN 1
ELSE 0
END=1)
== Debes tomar en cuenta que esta sintaxis no produce muy buenos planes de
acceso, si la tabla en cuestion tiene muchas filas, vale la pena considerar
una serie de horribles IF's para cada uno de los valores de @a.
Espero te sirva y 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.
Aragorn (CL) escribio:
Hola a todos, estoy tratando de realizar un where con un case, no sé
si se pueda hacer...


por ejemplo mi variable @a puede tener 1 o 2 . como puedo hacer que
cuando sea 1 me filtre por el campo TitleOfCourtesy y en caso de que
la variable sea 2 me filtre por el campo Region.


Se que este query esta malo, pero es para representar la idea.


declare @a numeric(1,0)

Set @a = 2

Select *
from dbo.Employees
Where (Case @a
When 1 Then TitleOfCourtesy = 'Ms.'
When 2 Then Region= 'WA'
End)


Gracias.

Aragorn.
Respuesta Responder a este mensaje
#3 Aragorn \(CL\)
22/01/2004 - 20:25 | Informe spam
Muchas Gracias Manuel, Javier y Adrian...


Aragorn.
Respuesta Responder a este mensaje
#4 Adrian Garcia
23/01/2004 - 00:07 | Informe spam
Tambien podrias resolverlo asi:

Select *
from dbo.Employees
WHERE
(@a = 1 AND Then TitleOfCourtesy = 'Ms.') OR (@a = 2 AND When 2 Then Region'WA')

Es muy probable que el plan de ejecucion de este query no utilizaría los
indices disponibles sobre las columnas Region y TitleCourtesy.

Saludos
Adrian D. Garcia
NDSoft


"Aragorn (CL)" wrote in message
news:
Hola a todos, estoy tratando de realizar un where con un case, no sé si se
pueda hacer...


por ejemplo mi variable @a puede tener 1 o 2 . como puedo hacer que cuando
sea 1 me filtre por el campo TitleOfCourtesy y en caso de que la variable
sea 2 me filtre por el campo Region.


Se que este query esta malo, pero es para representar la idea.


declare @a numeric(1,0)

Set @a = 2

Select *
from dbo.Employees
Where (Case @a
When 1 Then TitleOfCourtesy = 'Ms.'
When 2 Then Region= 'WA'
End)


Gracias.

Aragorn.


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida