2015-12-03 2 views
0

Как выполнить IF...THEN в операторе SQL SELECT? Могу ли я изменить к Case..then на IF..THEN, у меня есть некоторые ошибки в Case..thenКак выполнить оператор CASE в SQL SELECT?

DECLARE @Display Varchar(10) SET @Display = '210120' 
DECLARE @ret  Varchar(5) SET @ret  = '12345' 
DECLARE @ret2 Varchar(5) SET @ret2 = '6789' 

DECLARE @Custom2 Varchar(10) 
SELECT (CASE 
      WHEN CHARINDEX(LEFT(@Display, 1),@ret) > 0 THEN 
       SET @Custom2 = 'None' 
      WHEN CHARINDEX(LEFT(@Display, 1),@ret2) > 0 THEN 
       SET @Custom2 = @ret+'_'[email protected] 
     END) as Custom 

Спасибо заранее

+3

Не пытайтесь установить переменные в середине запроса выбора. –

+1

'CASE' является ** выражением ** (например,' a + b'), которое возвращает ** одиночное, атомное значение ** - это не оператор управления потоком *, который может обрабатывать блоки кода и тому подобное. –

+0

Совет: выражение 'CASE' может также иметь предложение' ELSE' для обработки любых неожиданных данных. – HABO

ответ

0

У вас есть несоответствие происходящему здесь. Вы не можете использовать выражение case для управления потоком, как вы делаете ... но тогда вы также можете использовать это как столбец. Не совсем понятно, что вы пытаетесь сделать здесь, но, возможно, это поможет.

DECLARE @Display Varchar(10) SET @Display = '210120' 
DECLARE @ret  Varchar(5) SET @ret  = '12345' 
DECLARE @ret2 Varchar(5) SET @ret2 = '6789' 

SELECT CASE WHEN CHARINDEX(LEFT(@Display, 1),@ret) > 0 THEN 
       'None' 
      WHEN CHARINDEX(LEFT(@Display, 1),@ret2) > 0 THEN 
       @ret+'_'[email protected] 
     END as Custom 
0

Ваш синтаксис немного выключите, попробуйте это вместо:

SELECT @Custom2 = CASE WHEN CHARINDEX(LEFT(@Display, 1),@ret) > 0 
         THEN 'None' 
        WHEN CHARINDEX(LEFT(@Display, 1),@ret2) > 0 
         THEN @ret + '_' + @Display 
        END As Custom 
Смежные вопросы