2017-01-27 4 views
1

У меня есть столбец [Color], который содержит «черный», «Красный», NULL, «WW», «RR»Использование сазе с ISNULL и еще

Я хочу иметь столбец, который должен иметь

if color black then 'B' 
if color red then 'r' 
if color is Null then 'Empty' 
for all other entries 'n/a' 

Я использую follwoing, но он показывает ошибки

SELECT Name, 
     CASE color 
      WHEN 'black' THEN 'b' 
      WHEN 'red' THEN 'r' 
      WHEN ISNULL(color, 'empty') 
      else 'n/a' 
      END AS Color_code 
FROM SalesLT.Product; 

ответ

4

вы можете использовать либо CASE структуру, чтобы сделать это, но вы не можете вызвать функцию, если вы используете CASE fieldname WHEN подход, так что вы может либо использовать CASE WHEN fieldname condition:

SELECT Name, 
     CASE WHEN color = 'black' THEN 'b' 
      WHEN color = 'red' THEN 'r' 
      WHEN color IS NULL THEN 'empty' 
      else 'n/a' 
      END AS Color_code 
FROM SalesLT.Product; 

ИЛИ:

SELECT Name, 
     CASE color 
      WHEN 'black' THEN 'b' 
      WHEN 'red' THEN 'r' 
      WHEN NULL THEN 'empty' 
      else 'n/a' 
      END AS Color_code 
FROM SalesLT.Product; 
+0

Или создать функцию и просто возвращает строку, заключенную! :) – Codexer

+0

@ Zaggler Вы не можете вызвать функцию в столбце с помощью выражения 'CASE fieldname WHEN' выражений' CASE'. –

+0

Я не говорю о столбце, просто вызываю функцию, чтобы выплюнуть строку ... – Codexer

3

Вы могли бы попробовать этот способ

SELECT Name, 
      CASE 
       WHEN color = 'black' THEN 'b' 
       WHEN color = 'red' THEN 'r' 
       WHEN color is null THEN 'empty' 
       ELSE 'n/a' 
      END AS Color_code 
    FROM SalesLT.Product; 
+0

Он работает как шарм. Огромное спасибо. Можете ли вы ответить мне, в чем причина того, что второй ответ будет неправильным. isnull() не работает с когда .. Большое спасибо –

+0

@MyurathanKajendran тип поля не может меняться в зависимости от строки, вот почему. – Codexer