有没有办法使用IN子句创建CASE语句?具有多个值的CASE IN语句
SELECT
CASE c.Number
IN ('1121231','31242323') THEN 1
IN ('234523','2342423') THEN 2
END AS Test
FROM tblClient c
有没有办法使用IN子句创建CASE语句?具有多个值的CASE IN语句
SELECT
CASE c.Number
IN ('1121231','31242323') THEN 1
IN ('234523','2342423') THEN 2
END AS Test
FROM tblClient c
是的。你需要使用“搜索”的形式,而不是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
您可以从几场比赛返回相同的值:
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的建议相同的执行计划,所以更多的是你想如何编写它的问题。
如果您有更多的数字或如果你打算为CASE
增加新的测试号码,那么你可以使用更灵活的方法:
DECLARE @Numbers TABLE
(
Number VARCHAR(50) PRIMARY KEY
,Class TINYINT NOT NULL
);
INSERT @Numbers
VALUES ('1121231',1);
INSERT @Numbers
VALUES ('31242323',1);
INSERT @Numbers
VALUES ('234523',2);
INSERT @Numbers
VALUES ('2342423',2);
SELECT c.*, n.Class
FROM tblClient c
LEFT OUTER JOIN @Numbers n ON c.Number = n.Number;
此外,而不是表变量,你可以使用一个常规表。
问题是您没有使用'in'语句,因此您没有真正回答问题 –
@ t-clausen.dk:如果您只想完全按照所述回答问题,唯一可能的答案是“No “,这不是很有建设性。 – Guffa
答案“不”是?我总是用'IN'写'CASE'语句......就像马丁史密斯那样。 –