SQL查询:根据包含特定值的表中的varchar列创建类别列

hel*_*lol 5 sql t-sql sql-server case

我有一个类似于以下的表:

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   
Run Code Online (Sandbox Code Playgroud)

我想写一个SELECT SQL查询(T-SQL),它将输出所有上面的列,但也显示一个额外的列作为SELECT语句的输出,其值取决于描述中是否存在单词"color"(如果存在"颜色",则它将是一个值,否则它将显示不同的值).

(我还想在其上面显示另一个额外的列,其值取决于Description列中"matt"或"shiny"字样的存在.但我认为这样做的方法类似).

我相信我应该可以使用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
Run Code Online (Sandbox Code Playgroud)

如何让Category2的输出依赖于Category1的输出?我正在尝试类似上面的东西,但它不起作用.

我在这里回答了我的扩展问题: T-SQL CASE语句依赖于同一SELECT查询中的另一个CASE语句

XN1*_*N16 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
Run Code Online (Sandbox Code Playgroud)

您只需为要搜索的所有不同单词添加更多列即可。显然,您可以将列的返回类型更改为您想要的任何类型,但我认为布尔值适合这种情况。