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