Справка по условию запроса SQL Server

#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')