[SQL] 오라클 SQL의 CASE .. 언제 표현
SQL오라클 SQL의 CASE .. 언제 표현
나는 1 열이있는 테이블을 가지고 다음과 같은 데이터가
Status
a1
i
t
a2
a3
내 선택 쿼리에서 다음과 같은 결과를 표시 할
Status| STATUSTEXT
a1 | Active
i | Inactive
t | Terminated
a2 | Active
a3 | Active
선택 쿼리에서 내가 생각할 수있는 한 가지 방법은 스위치를 사용하여 때 표현
SELECT
status,
CASE status
WHEN 'a1' THEN 'Active'
WHEN 'a2' THEN 'Active'
WHEN 'a3' THEN 'Active'
WHEN 'i' THEN 'Inactive'
WHEN 't' THEN 'Terminated'
END AS StatusText
FROM stage.tst
활성 상태 및 전체 활성 상태를 표현 3 시간은 하나 개의 표현에서 확인할 수 있습니다 때 나는 작성할 필요가 없습니다이 일을 다른 방법이 있습니까?
해결법
-
==============================
1.당신은 IN 절을 사용할 수 있습니다
당신은 IN 절을 사용할 수 있습니다
같은 뭔가
SELECT status, CASE WHEN STATUS IN('a1','a2','a3') THEN 'Active' WHEN STATUS = 'i' THEN 'Inactive' WHEN STATUS = 't' THEN 'Terminated' END AS STATUSTEXT FROM STATUS
이 데모에서보세요
-
==============================
2.물론이야...
물론이야...
select case substr(status,1,1) -- you're only interested in the first character. when 'a' then 'Active' when 'i' then 'Inactive' when 't' then 'Terminated' end as statustext from stage.tst
그러나,이 스키마에 대한 몇 가지 걱정 가지가있다. 첫째로 당신이 반드시 가장 좋은 방법은 갈 수없는 말에 번호를 추가, 뭔가를 의미 열이있는 경우. 또한, 상태의 수에 따라 '당신은 별도의 테이블에 외래 키에이 열을 돌려 고려할 수있다.
귀하의 의견을 바탕으로 당신은 확실히 외래 키에이를 켜려고합니다. 예를 들면
create table statuses ( -- Not a good table name :-) status varchar2(10) , description varchar2(10) , constraint pk_statuses primary key (status) ) create table tst ( id number , status varchar2(10) , constraint pk_tst primary key (id) , constraint fk_tst foreign key (status) references statuses (status) )
귀하의 질문은된다
select a.status, b.description from tst a left outer join statuses b on a.status = b.status
여기 입증하는 SQL 바이올린입니다.
-
==============================
3.당신은 CASE의 ELSE 조건을 사용하도록 다시 작성할 수 있습니다 :
당신은 CASE의 ELSE 조건을 사용하도록 다시 작성할 수 있습니다 :
SELECT status, CASE status WHEN 'i' THEN 'Inactive' WHEN 't' THEN 'Terminated' ELSE 'Active' END AS StatusText FROM stage.tst
-
==============================
4.디코딩을 사용하여이 작업을 수행하는 것이 더 쉬울 수 있습니다.
디코딩을 사용하여이 작업을 수행하는 것이 더 쉬울 수 있습니다.
SELECT status, decode ( status, 'a1','Active', 'a2','Active', 'a3','Active', 'i','Inactive', 't','Terminated', 'Default')STATUSTEXT FROM STATUS
-
==============================
5.
SELECT STATUS, CASE WHEN STATUS IN('a1','a2','a3') THEN 'Active' WHEN STATUS = 'i' THEN 'Inactive' WHEN STATUS = 't' THEN 'Terminated' ELSE null END AS STATUSTEXT FROM stage.tst;
-
==============================
6.링크 된 오라클 케이스 상판에 대한 웹 검색 때문에, 나는 질문의 경우 표현에 대한 질문에 그래도 대답하지, case 문 여기를 추가 :
링크 된 오라클 케이스 상판에 대한 웹 검색 때문에, 나는 질문의 경우 표현에 대한 질문에 그래도 대답하지, case 문 여기를 추가 :
CASE WHEN grade = 'A' THEN dbms_output.put_line('Excellent'); WHEN grade = 'B' THEN dbms_output.put_line('Very Good'); WHEN grade = 'C' THEN dbms_output.put_line('Good'); WHEN grade = 'D' THEN dbms_output.put_line('Fair'); WHEN grade = 'F' THEN dbms_output.put_line('Poor'); ELSE dbms_output.put_line('No such grade'); END CASE;
또는 기타 변형 :
CASE grade WHEN 'A' THEN dbms_output.put_line('Excellent'); WHEN 'B' THEN dbms_output.put_line('Very Good'); WHEN 'C' THEN dbms_output.put_line('Good'); WHEN 'D' THEN dbms_output.put_line('Fair'); WHEN 'F' THEN dbms_output.put_line('Poor'); ELSE dbms_output.put_line('No such grade'); END CASE;
당 오라클 문서 : https://docs.oracle.com/cd/B10501_01/appdev.920/a96624/04_struc.htm
-
==============================
7.당신은 상태의 첫 번째 문자를 확인할 수 있습니다. 이를 위해 당신은 문자열 함수를 사용합니다.
당신은 상태의 첫 번째 문자를 확인할 수 있습니다. 이를 위해 당신은 문자열 함수를 사용합니다.
SUBSTR (상태, 1,1)
귀하의 경우 과거합니다.
-
==============================
8.다음 구문은 작동합니다 :
다음 구문은 작동합니다 :
.... where x.p_NBR =to_number(substr(y.k_str,11,5)) and x.q_nbr = (case when instr(substr(y.m_str,11,9),'_') = 6 then to_number(substr(y.m_str,11,5)) when instr(substr(y.m_str,11,9),'_') = 0 then to_number(substr(y.m_str,11,9)) else 1 end )
-
==============================
9.
CASE TO_CHAR(META.RHCONTRATOSFOLHA.CONTRATO) WHEN '91' AND TO_CHAR(META.RHCONTRATOSFOLHA.UNIDADE) = '0001' THEN '91RJ' WHEN '91' AND TO_CHAR(META.RHCONTRATOSFOLHA.UNIDADE) = '0002' THEN '91SP' END CONTRATO, 00905. 00000 - "missing keyword" *Cause: *Action: Erro na linha: 15 Coluna: 11
from https://stackoverflow.com/questions/12650875/case-when-expression-in-oracle-sql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 오라클 데이터베이스 열에서 특정 값을 바꾸려면? (0) | 2020.06.22 |
---|---|
[SQL] WHERE 절 A (+)는 오라클 SQL에서 무엇을 의미하는지에 서명 하는가? [복제] (0) | 2020.06.22 |
[SQL] SQL Server 리포트 '잘못된 열 이름',하지만 열이 존재하고 쿼리 관리 스튜디오를 통해 작동합니다 (0) | 2020.06.22 |
[SQL] SQL은 같은 테이블에 여러 열 조인 (0) | 2020.06.22 |
[SQL] SQL Server에서 삭제 최적화 (0) | 2020.06.22 |