2013-05-01 53 views
5

我有類似下面的表中的VARCHAR列創建類別欄:SQL查詢:基於表包含特定值

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」存在,則它將是一個值,如果不是會顯示不同的值)。我也想要顯示另一個額外的列,它的值取決於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 

如何獲得Category2的輸出依賴於Category1的輸出?我正在嘗試類似上面的內容,但不起作用。

我的擴展問題是在這裏找到答案:T-SQL CASE statement relies on another CASE statement in same SELECT query

回答

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 

您將只需添加更多列所有你想要搜索的不同單詞。顯然,你可以將列的返回類型更改爲任何你想要的,但我認爲布爾值將適用於這種情況。

0

除非我誤解你的要求,你可以使用一個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 
+0

完美謝謝! – Katie 2013-05-01 11:23:40