programing

여러 값을 가진 CASE IN 문

jooyons 2023. 8. 8. 21:32
반응형

여러 값을 가진 CASE IN 문

IN 조항으로 CASE 문을 만드는 방법이 있습니까?

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

예. 표현식의 "단순" 형식이 아닌 "검색" 형식을 사용해야 합니다.

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

이것은 아마도 마틴스의 제안과 같은 실행 계획을 초래할 것이기 때문에, 그것을 어떻게 쓰느냐가 더 중요합니다.

SQL Server에 대한 질문이지만, 마틴 스미스의 답변을 연장하고 싶습니다.

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를 전혀 모릅니다.

더 많은 숫자가 있거나 새로운 테스트 번호를 추가하려는 경우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;

또한 테이블 변수 대신 일반 테이블을 사용할 수 있습니다.

언급URL : https://stackoverflow.com/questions/7449509/case-in-statement-with-multiple-values

반응형