SQL-запрос: создать столбец категории на основе столбца varchar в таблице, содержащей определенные значения

У меня есть таблица, похожая на следующую:

Date        Description     Value1  Value2  
01/01/2012  shiny colour    2       0       
01/01/2012  yellow colour   2       2       
03/01/2012  matt colour     2       2       
03/01/2012  matt            4       1   
03/01/2012  shiny           2       2   

Я хочу написать запрос SELECT SQL (T-SQL), который выведет все вышеперечисленные столбцы, но также отобразит дополнительный столбец в качестве вывода оператора SELECT, значение которого зависит от наличия слова «цвет» в описании ( если присутствует «цвет», это будет одно значение, в противном случае будет отображаться другое значение).

(Я также хотел бы отобразить еще один дополнительный столбец поверх того, значение которого зависит от наличия слов «матовый» или «блестящий» в столбце «Описание». Но я предполагаю, что метод сделать это будет аналогичным).

Я считаю, что должен быть в состоянии сделать это с помощью функции COALESCE, но я не знаком с этим и изо всех сил пытаюсь заставить что-нибудь работать?

РАСШИРЕНИЕ

Эй, спасибо за ваши ответы. Они действительно полезны. У меня есть еще одно дополнение к вопросу. Мой второй сгенерированный столбец основан на информации из первого сгенерированного столбца. Итак, что-то вроде:

SELECT *,
CASE 
    WHEN Description LIKE '%colour%' THEN 'SomeValue'
    ELSE 'Unclassified'
END AS Category1,
CASE
    WHEN AnotherColumn LIKE 'Something' THEN 'SomeValue'
    WHEN Category1='Unclassified' THEN 'Unclassified'
    ELSE 'Generic'
END AS Category2
FROM table_name

Как заставить выходные данные категории 2 полагаться на выходные данные категории 1? Я пытаюсь что-то вроде выше, но это не работает.

На мой дополнительный вопрос ответили здесь: оператор T-SQL CASE зависит от другого оператора CASE в том же запросе SELECT


person hello-klol    schedule 01.05.2013    source источник


Ответы (2)


SELECT *,
       CASE WHEN Description LIKE '%colour%' THEN
            1
       ELSE
            0
       END AS HasColour,
       CASE WHEN Description LIKE '%matt%' THEN
            1
       ELSE
            0
       END AS HasMatt,
       CASE WHEN Description LIKE '%shiny%' THEN
            1
       ELSE
            0
       END AS HasShiny
FROM   table_name

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

person XN16    schedule 01.05.2013

Если я неправильно понимаю, о чем вы спрашиваете, вы можете использовать оператор case:

SELECT Date,  
Description, 
Value1, 
Value2, 
Case when Description like '%colour%' then OTHERCOL else OTHERCOL2 end as Colourful,
Case when Description like '%matt%' then OTHERCOL else OTHERCOL2 end as Matt,
Case when Description like '%shiny%' then OTHERCOL else OTHERCOL2 end as Shiny, 
FROM yourTable
person jle    schedule 01.05.2013