#sql #sql-server #tsql #where-clause
#sql #sql-server #tsql #where-предложение
Вопрос:
У меня есть следующий запрос. но это выдает мне ошибку в in
предложении.
declare @lastName varchar(20)
set @lastName = 'Davis'
select *
from Table1
where Date >= '2013-01-09'
and lastname in(
case
when @lastName = 'DAvis' THEN @lastName
else 'Brown','Hudson' end)
Ответ №1:
Что-то вроде этого:
select *
from Table1
where
Date >= '2013-01-09' and
(
(@lastName = 'Davis' and lastname = @lastName) or
(@lastName <> 'Davis' and lastname in ('Brown','Hudson'))
)
Комментарии:
1. Тебе нужны «(«и «)» во всем аргументы, не так ли?
Ответ №2:
Интересно. Я думаю, что в данном случае именно «‘Brown’, ‘Hudson'» является причиной проблемы. Вероятно, вам было бы лучше вообще не использовать оператор case.
Проблема в том, что я не знаю способа вернуть несколько значений в одном случае, поэтому вам нужно поступить так, как сказал Алекс, и использовать простую логическую логику. Однако вы можете использовать оператор case в вашем предложении where, просто чтобы не возвращать несколько значений в одном случае.
Ответ №3:
Если вы хотите отфильтровать результаты по трем именам, используйте следующий запрос:
declare @lastName varchar(20)
set @lastName = 'Davis'
select * from Table1
where Date >= '2013-01-09'
and lastname in(
'DAvis' ,'Brown','Hudson')