2014-09-04 180 views
0

我想使用SQL來查詢我訪問(2010)數據庫中的一些數據。使用LIKE語句的SELECT CASE sql

我想要做的是將所有IBS患者全部拔出。 (這我知道該怎麼做)。 然後使用SQL創建一個變量,該變量在存在「?IBS」(未診斷)時存儲0,如果在此變量中存儲了「IBS」(存儲爲「IBS」),則存儲1。 該信息存儲在名爲「AdditionalHealthProblems」的文本變量中。

我正在嘗試使用SELECT CASE語句,但似乎無法使其工作。

SELECT AdditionalHealthProblems, 'Diagnosed' = 
     CASE 
      WHEN AdditionalHealthProblems LIKE '*?IBS*' THEN '0' 
      ELSE '1' 
     END 
FROM tblFollowUpQs 
WHERE (((tblFollowUpQs.AdditionalHealthProblems) Like '*IBS*')); 

但這不起作用。我通過一個錯誤消息讓在「'Diagnosed' = CASE WHEN AdditionalHealthProblems LIKE '*?IBS*' THEN '0' ELSE '1'END"語句錯誤。

有人能告訴我什麼是錯的? 或者,如果有更好的方法來獲取這些信息?

謝謝!

-----------------編輯--------------------

改爲

SELECT tblFollowUpQs.AdditionalHealthProblems, CASE 
WHEN tblFollowUpQs.AdditionalHealthProblems LIKE 'IBS' THEN '0' END As Diagnosed 
FROM tblFollowUpQs 
WHERE (((tblFollowUpQs.AdditionalHealthProblems) Like 'IBS')); 

但它仍然沒有工作...

錯誤信息給一個語法錯誤和亮點WHEN

---------------答案------ --------------------

將選擇案例切換到Switch()函數,它工作!

下面是最終代碼:

SELECT tblFollowUpQs.AdditionalHealthProblems, Switch(tblFollowUpQs.AdditionalHealthProblems LIKE '*[?]*', 1, tblFollowUpQs.AdditionalHealthProblems NOT LIKE '*[?]*', 0) 
FROM tblFollowUpQs 
WHERE (((tblFollowUpQs.AdditionalHealthProblems) Like '*IBS*')); 
+0

它的這種說法 – VT555 2014-09-04 18:40:37

+0

檢查中丟失的運算符錯誤信息這一個: http://stackoverflow.com/questions/7687717/sql-2005-can-i-use -key-case-in-a-case-statement- 僅供參考:通配符是'%'字符。 – newBee 2014-09-04 18:41:36

+0

就像'%IBS%'或'%IBS_'一樣不使用*或*?替代或「正則表達式」 – 2014-09-04 18:42:45

回答

5

Microsoft Access不支持CASE...WHEN聲明。使用IIF語句來代替:

IIF(表達值,如果真值,如果假

reference

SELECT tblFollowUpQs.AdditionalHealthProblems, 
IIf(tblFollowUpQs.AdditionalHealthProblems Like "IBS",1,0) AS [Diagnosed] 
FROM tblFollowUpQs 
WHERE (((tblFollowUpQs.AdditionalHealthProblems) Like "'IBS")); 

如果您需要使用通配符字符,你可以閱讀更多關於office.microsoft.com

+0

謝謝!我只是在你回答時才明白這一點! – VT555 2014-09-04 19:12:44

+1

交換機也可以工作,雖然我個人認爲IIF更具可讀性。 – jpw 2014-09-04 19:15:37

+1

我同意在這種情況下IIf()將是更常見的選擇,但[Switch()](http://office.microsoft.com/en-ca/access-help/switch-function-HA001228918.aspx)對避免多個嵌套的IIf()很好。 – 2014-09-04 19:21:10

0

查詢

SELECT AdditionalHealthProblems, Diagnosed= (
    CASE 
     WHEN AdditionalHealthProblems LIKE '?IBS' THEN '0' 
     ELSE '1' 
    END) 
FROM tblFollowUpQs 
WHERE (((tblFollowUpQs.AdditionalHealthProblems) Like '%IBS')); 
+2

請解釋查詢。 – Ram 2015-07-06 14:36:18