我有一张类似于以下内容的表格:
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”一词的存在描述(如果存在“颜色”,它将是一个值,否则它将显示不同的值)。
(我还想在其上面显示另一个额外的列,其值取决于Description列中“matt”或“shiny”字样的存在。但我认为这样做的方法类似)
我相信我应该可以使用COALESCE函数来做到这一点,但我对此并不熟悉并且正在努力让任何工作变得有效?
EXTENSION
嘿,谢谢你的回答。他们真的很有帮助。我还有一个问题的扩展。我的第二个生成列依赖于第一个生成列中的信息。如下所示: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的输出?我正在尝试类似上面的内容,但它不起作用。
我在此处回答了我的扩展程序问题: T-SQL CASE statement relies on another CASE statement in same SELECT query
答案 0 :(得分: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
您只需为要搜索的所有不同字词添加更多列。显然,您可以将列的返回类型更改为您想要的任何值,但我认为布尔值适合于这种情况。
答案 1 :(得分:0)
除非我误解了你的要求,否则你可以使用案例陈述:
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