2016-01-13 1575 views
1

我知道SQL CASE將不會接受in listthen部分CASE語句。SQL Server- CASE WHEN THEN在列表中的多個值

什麼,我的理想尋找的是這樣一個案例:

CASE WHEN 'A' Then in list ['B' , 'C'] ELSE 'A' END 

CASE WHEN 'A' Then 'B' or 'C' ELSE 'A' END 

我使用這個CASE語句作爲設計一個SQL視圖的一部分。

只是讓你知道,我已經檢查了Multiple values in SQL CASE's THEN Statement和那裏的答案沒有爲我工作。

編輯,問題描述和虛擬數據:

我的主表是dbo.main 在這個表我對形式

Year CTG 
2015 A 
2015  B 
2015 C 
2015 D 

數據在我的設計視圖我又寫道的:

SELECT DISTINCT YEAR, 'GENRL' AS SETID, '000001' AS LABOR_AGREEMENT, CTG 
FROM   dbo.main 

現在我的終極目標是擁有下表:

Year CTG 
2015 B/C 
2015  B 
2015 C 
2015 D 

CTG值是啓動另一臺在另一個頁面的一個關鍵,我想該表顯示爲CTG所有的值有:BCTG:C

+4

你到底想達到什麼目的? '如果'A'然後'B'或'C'......'並不完全合理。當它是'A'時你想做什麼? – Siyual

+0

我希望將結果作爲b和c –

+0

'case'從幾個不同的選項(同一類型)中返回一個值,就是這樣。如果你想返回一個有條件的'table'變量,你需要一個函數或SP(或者可能是一個聰明的CTE可以這樣做;我不知道......) –

回答

0

您可以使用搜索CASE

SELECT (CASE WHEN CTG = 'A' THEN 'B/C' 
      ELSE CTG 
     END) 
FROM dbo.main 

其實,這個工程用一個簡單的CASE還有:

SELECT (CASE CTG WHEN 'A' THEN 'B/C' 
      ELSE CTG 
     END) 
FROM dbo.main 
+0

您提供的'B/C'只是一個簡單的文字。 「/」在我的代碼意味着或。 –

+1

你是指什麼或在這裏?你還說你想要兩個:\t 「我想結果是b和c - 用戶12321 16分鐘前」 –

+0

是「或」還是「和」? –

0

對於單個行中的單個字段沒有「或」可能性。單個柱(字段)可以在單個行中包含一個值。你所要求的,聽起來像是可以用額外值(當案例適用時,或者爲null),或者相反(但在你的問題中沒有解決)額外值的第二列解決額外值的額外行。
當你評論,你想要的「價值觀」,而不是連接(或別的東西),可以產生額外的列,以適應第二個值時將其應用於這樣的:

SELECT DISTINCT YEAR, 'GENRL' AS SETID, '000001' AS LABOR_AGREEMENT, 
CASE WHEN CTG='A' THEN 'B' ELSE CTG END AS CTG, 
CASE WHEN CTG='A' THEN 'C' END   AS CTGbis -- else null is the default behavior 
FROM dbo.main