CASE查询说明

时间:2011-09-29 11:53:42

标签: sql-server

SQL新手,我刚刚创建了一个带有assitance的SQL查询:

       SELECT CASE

    WHEN exists (SELECT CLIENT_CODE FROM STG_DM_CLIENT      
       WHERE CLIENT_CODE 
      NOT IN (SELECT CLIENT_CODE FROM DM_CLIENT)) THEN 'A'
      else

WHEN  exists (SELECT STG.CLIENT_CODE AS TRAN_TYPE
    FROM  STG_DM_CLIENT STG          
    JOIN DM_CLIENT SRC
    ON SRC.CLIENT_CODE = STG.CLIENT_CODE  
    WHERE (SRC.CLIENT_NAME <> STG.CLIENT_NAME)) THEN 'C'
    END 
FROM DM_CLIENT, STG_DM_CLIENT

无法提供正确的结果集,在

旁边显示incorect语法

第15行,第1行,第8行 关键字“WHEN”附近的语法不正确。

关于我做错了什么的想法

3 个答案:

答案 0 :(得分:2)

您只想在END处有一个ELSE语句。正确的格式如下:

CASE WHEN <condition 1> THEN <output 1>
     WHEN <condition 2> THEN <output 2>
     -- Optional, if left out assumes NULL for unhandled conditions
     [ELSE <output 3> ]
     END

当您在第一个条件之后放置ELSE时,引擎需要最终输出,而不是另一个条件。

答案 1 :(得分:1)

让我格式化您的示例(不进行修改),以便结构可见:

SELECT CASE WHEN exists (SELECT CLIENT_CODE FROM STG_DM_CLIENT       
                         WHERE CLIENT_CODE NOT IN (SELECT CLIENT_CODE FROM DM_CLIENT))
            THEN 'A' 
            else WHEN  exists (SELECT STG.CLIENT_CODE AS TRAN_TYPE 
                                 FROM STG_DM_CLIENT STG           
                                      JOIN DM_CLIENT SRC 
                                      ON SRC.CLIENT_CODE = STG.CLIENT_CODE   
                                WHERE (SRC.CLIENT_NAME <> STG.CLIENT_NAME))
                 THEN 'C' 
                 END  
  FROM DM_CLIENT, STG_DM_CLIENT 

所以你的结构是:

  CASE WHEN ... THEN ...
       ELSE WHEN ... THEN ...
            END

这不正确。您可以将其更改为两个嵌套的case语句(完成CASE和END):

  CASE WHEN ... THEN ...
       ELSE CASE WHEN ... THEN ...
            END
  END

或(更好):

  CASE WHEN ... THEN ...
       WHEN ... THEN ...
       [ELSE ...]
  END

所以,从原始陈述中删除else,你应该没事。

答案 2 :(得分:0)

目前尚不清楚你的追求是什么,这是最接近的有效陈述;

SELECT 
    CASE WHEN EXISTS (...) 
        THEN 'A'
    ELSE 
        CASE WHEN EXISTS (...) 
            THEN 'C'
            ELSE 'Neither exists()'
        END
    END

当第一个存在匹配时,你将获得A
当第一个不存在时,如果第二个匹配

,你将获得C.