2014-09-04 185 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