Rubberduck-Debugging

DECODE 함수 본문

개발자/20181127 교육과정

DECODE 함수

P缶 2018. 12. 20. 15:31

** b.btyped이, 5이면 reboard, 6이면 album, 7이면 bbs를, 그밖엔 board를 'control이란 컬럼으로 출력하라는 말.

sql계의 if-else문이라고 생각하면 쉽다

1
2
3
4
5
6
7
8
9
10
select b.bcode, b.bname, b.btype, b.ccode, c.cname,
        decode(b.btype, 
            5'reboard',
            6'album',
            7'bbs',
            'board') control 
    from board_list b join category c
        on b.ccode = c.ccode
    order by ccode, bcode;
 
cs



* DTO에 control 컬럼을 추가했다. (DTO는 테이블과 일대일 매칭되지 않아도 된다)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package com.bit.board.admin.model;
 
public class BoardListDto extends CategoryDto {
    private int bcoce;
    private String bname;
    private int btype;
    private String control;
 
    public int getBcoce() {
        return bcoce;
    }
 
    public void setBcoce(int bcoce) {
        this.bcoce = bcoce;
    }
 
    public String getBname() {
        return bname;
    }
 
    public void setBname(String bname) {
        this.bname = bname;
    }
 
    public int getBtype() {
        return btype;
    }
 
    public void setBtype(int btype) {
        this.btype = btype;
    }
 
    public String getControl() {
        return control;
    }
 
    public void setControl(String control) {
        this.control = control;
    }
    
}
 
cs



DECODE

  • - DECODE 함수는 조건에 따라 데이터를 다른 값이나 컬럼값으로 추출 할 수 있다.
  • - DECODE(VALUE, IF1, THEN1, IF2, THEN2...) 형태로 사용 할 수 있다.
  • - VALUE 값이 IF1일 경우에 THEN1 값을 반환하고, VALUE 값이 IF2일 경우에는 THEN2 값을 반환한다.
  • - DECODE 함수 안에 DECODE함수를 중첩으로 사용 할 수 있다.

아래는 DECODE 함수의 일반적인 예제이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
-- 부서번호가 10이면 ACCOUNTING, 20이면 RESEARCH, 30이면 SALES
-- 나머지는 OPERATIONS를 출력하는 예제
SELECT deptno, DECODE(deptno, 10 , 'ACCOUNTING' ,
                              20 , 'RESEARCH' ,
                              30 , 'SALES', 'OPERATIONS') name
  FROM dept;
 
DEPTNO NAME
------ ----------
     10 ACCOUNTING
     20 RESEARCH
     30 SALES
     40 OPERATIONS

아래는 DECODE 함수에서 집계 함수를 사용한 예제이다

1
2
3
4
5
6
7
8
9
10
11
12
-- 10부서는 급여합계를, 20부서는 최대값을, 30부서는 최소값을 출력하는 예제
SELECT deptno, DECODE(deptno, 10 , SUM(sal),
                              20 , MAX(sal),
                              30 , MIN(sal)) sal
  FROM emp
 GROUP BY deptno;
 
DEPTNO        SAL
--------- --------
       30      950
       20     3000
       10     8750

DECODE함수는 집계함수와 함께 통계 데이터를 추출할 때 많이 사용한다.


출처 : http://www.gurubee.net/lecture/1028