Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL查询:基于表中包含特定值的varchar列创建类别列_Sql_Sql Server_Tsql_Case - Fatal编程技术网

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

SQL查询:基于表中包含特定值的varchar列创建类别列,sql,sql-server,tsql,case,Sql,Sql Server,Tsql,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 s

我有一张类似于以下内容的表格:

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语句的输出,该语句的值取决于描述中是否有“COLOR”一词(如果有“COLOR”,它将是一个值,如果没有,它将显示不同的值)

(我还想在其顶部显示另一个额外的列,其值取决于描述列中是否存在“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
如何使Category2的输出依赖于Category1的输出?我正在尝试类似上面的方法,但不起作用


这里回答了我的扩展问题:

除非我误解了您的问题,否则您可以使用案例陈述:

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

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