Oracle 의 Case 문구

2934 단어 Oaclenull
Oracle 의 CASE 표현 식
현재 Oracle 은 두 가지 CASE 표현 방식 을 지원 하 는데 하 나 는 Oracle 을 Simple CASE (간단 한 형식) 라 고 부 르 고 다른 하 나 는 searched CASE (조회 형식) 라 고 부른다.Simple CASE 는 함수 Decode 를 사용 하 는 것 과 같 지만 Case 는 일반적으로 더욱 복잡 한 문 구 를 조작 하 는 데 사용 된다.CASE 의 형식 은 읽 기 가 더욱 쉽다.
 
simple CASE 의 표현 형식 은 다음 과 같다.
 
CASE expr WHEN comparison_expr THEN return_expr[, WHEN comparison_expr THEN return_expr]... [ELSE else_expr] END
 
* 주: [] 내용 은 생략 가능
 
실행 방법:
Oracle 은 표현 식 expr 와 표현 식 comparison 여 부 를 검사 합 니 다.expr 가 같 으 면 return 을 실행 합 니 다.expr, 그렇지 않 으 면 ELSE elseexpr 의 내용.
 
searched CASE 표시 형식 은 다음 과 같 습 니 다.
 
CASE WHEN condition THEN return_expr [, WHEN condition THEN return_expr]   ... ELSE else_expr] END
 
 어떤 방식 으로 든 사용 할 수 있다.
 
이 두 가지 표현 방식 은 모두 최대 255 개의 매개 변 수 를 지원 하 는데 그 중에서 When... Then 한 쌍 은 2 개의 매개 변수 로 계산 된다.
 
예 를 들 면:
1、
SELECT AVG(CASE when e.salary > 2000 THEN e.salary ELSE 2000 end)   AS avg_sal_2k_floorFROM employees e;2、
SELECT AVG(CASE WHEN e.sal BETWEEN 0 AND 2000 THEN e.sal ELSE null END) avg2000,    AVG(CASE WHEN e.sal BETWEEN 2001 AND 5000 THEN e.sal ELSE null END) avg5000FROM emps e;
 
3、
SELECT SUM(CASE WHEN cust_credit_limit BETWEEN  0 AND 3999 THEN 1 ELSE 0 END)
  AS "0-3999",
SUM(CASE WHEN cust_credit_limit BETWEEN  4000 AND 7999 THEN 1 ELSE 0 END)
  AS "4000-7999",
SUM(CASE WHEN cust_credit_limit BETWEEN  8000 AND 11999 THEN 1 ELSE 0 END)
  AS "8000-11999",
SUM(CASE WHEN cust_credit_limit BETWEEN  12000 AND 16000 THEN 1 ELSE 0 END)
  AS "12000-16000"
FROM customers WHERE cust_city = 'Marshal';

    0-3999  4000-7999 8000-11999 12000-16000
---------- ---------- ---------- -----------
         8          7          7           1

4、
SELECT (CASE WHEN cust_credit_limit BETWEEN  0 AND 3999 THEN  ' 0 - 3999'
   WHEN cust_credit_limit BETWEEN  4000 AND 7999 THEN ' 4000 - 7999'
   WHEN cust_credit_limit BETWEEN  8000 AND 11999 THEN  ' 8000 - 11999'
   WHEN cust_credit_limit BETWEEN  12000 AND 16000 THEN '12000 - 16000' END)
  AS BUCKET, COUNT(*) AS Count_in_Group
FROM customers WHERE cust_city = 'Marshal' GROUP BY
 (CASE WHEN cust_credit_limit BETWEEN  0 AND 3999 THEN ' 0 - 3999'
 WHEN cust_credit_limit BETWEEN  4000 AND 7999 THEN ' 4000 - 7999'
 WHEN cust_credit_limit BETWEEN  8000 AND 11999 THEN  ' 8000 - 11999'
 WHEN cust_credit_limit BETWEEN  12000 AND 16000 THEN '12000 - 16000' END);

BUCKET        COUNT_IN_GROUP
------------- --------------
 0 - 3999                  8
 4000 - 7999               7
 8000 - 11999              7
12000 - 16000              1

좋은 웹페이지 즐겨찾기