有沒有辦法使用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'語句......就像馬丁史密斯那樣。 –