케이스 .. Oracle SQL 표현시
나는 1개의 컬럼이 있는 테이블을 가지고 있고 다음과 같은 데이터를 가지고 있다.
Status
a1
i
t
a2
a3
선택한 쿼리에 다음 결과를 표시하려고 합니다.
Status| STATUSTEXT
a1 | Active
i | Inactive
t | Terminated
a2 | Active
a3 | Active
select 쿼리에서 식을 사용할 때 스위치를 사용하는 것이 한 가지 방법이라고 생각할 수 있습니다.
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
[액티브 상태(Active Status)]에 대해 표현식을 3회, 전체 활성 상태를 하나의 표현으로 확인할 수 있는 경우]라고 쓸 필요가 없는 다른 방법이 있습니까?
를 사용할 수 있습니다.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
이 데모를 보세요.
SQL 바이올린 데모
물론...
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
의 ELSE 조건을 사용하도록 다시 쓸 수 있습니다.
SELECT status,
CASE status
WHEN 'i' THEN 'Inactive'
WHEN 't' THEN 'Terminated'
ELSE 'Active'
END AS StatusText
FROM stage.tst
디코딩을 사용하는 것이 더 쉬워집니다.
SELECT
status,
decode ( status, 'a1','Active',
'a2','Active',
'a3','Active',
'i','Inactive',
't','Terminated',
'Default')STATUSTEXT
FROM STATUS
웹 검색 이후Oracle 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;
Oracle 문서별: https://docs.oracle.com/cd/B10501_01/appdev.920/a96624/04_struc.htm
다음 구문이 작동합니다.
....
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
)
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;
상태의 첫 번째 문자만 확인할 수 있습니다.이를 위해 서브스트링 함수를 사용합니다.
기판(상태, 1,1)
당신 과거의 경우.
DECODE(SUBSTR(STATUS,1,1),'a','Active','i','Inactive','t','Terminated','N/A')
언급URL : https://stackoverflow.com/questions/12650875/case-when-expression-in-oracle-sql
'bestsource' 카테고리의 다른 글
실제 데이터를 사용하여 테스트할 수 있는 공개적으로 액세스 가능한 JSON 데이터 소스가 있습니까? (0) | 2023.03.20 |
---|---|
403 Django 프레임워크에서 ajax Post 요청을 할 때 금지된 오류 발생 (0) | 2023.03.20 |
Eclipse 자체에서 Spring Boot 웹 애플리케이션을 실행하는 방법은 무엇입니까? (0) | 2023.03.20 |
2개의 json 객체의 차이 가져오기 (0) | 2023.03.20 |
각도 UI 대 각도 스트랩 (0) | 2023.03.20 |