it-swarm.cn

具有多个值的CASE IN语句

有没有一种方法可以使用IN子句进行CASE语句?

SELECT
CASE c.Number
IN ('1121231','31242323') THEN 1
IN ('234523','2342423') THEN 2
END AS Test
FROM tblClient c
39
mameesh

是。您需要使用 CASE 表达式的“搜索”形式而不是“简单”形式

SELECT CASE
         WHEN c.Number IN ( '1121231', '31242323' ) THEN 1
         WHEN c.Number IN ( '234523', '2342423' ) THEN 2
       END AS Test
FROM   tblClient c  
85
Martin Smith

您可以从多个匹配项中返回相同的值:

SELECT
  CASE c.Number
    WHEN '1121231' THEN 1
    WHEN '31242323' THEN 1
    WHEN '234523' THEN 2
    WHEN '2342423' THEN 2
  END AS Test
FROM tblClient c

这可能会产生与Martins建议的执行计划相同的执行计划,因此,更多的是您要如何编写它。

8
Guffa

这个问题特定于SQL Server,但我想扩展 Martin Smith的答案

SQL:2003标准允许为简单案例表达式定义多个值:

SELECT CASE c.Number
          WHEN '1121231','31242323' THEN 1
          WHEN '234523','2342423' THEN 2
       END AS Test
FROM tblClient c;

它是可选功能: 简单CASE表达式中用逗号分隔的谓词“(F263)

句法:

CASE <common operand>
     WHEN <expression>[, <expression> ...] THEN <result>
    [WHEN <expression>[, <expression> ...] THEN <result>
     ...]
    [ELSE <result>]
END

众所周知,我不知道任何实际支持该语法的RDBMS。

0
Lukasz Szozda