일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- #select#from#distinct
- #jQuery#mouse#over
- #html#테이블#table
- #C언어#성적처리#점수#등급
- #C언어#타입#printf
- #자바스크립트#만년달력#달력
- #증감#연산자
- #C언어#숫자비교#삼항연산자
- #클릭#숨기기#보이기
- #자바스크립트#alert
- #C언어#scanf#fflush
- #alert#자바스크립트#radio#check
- #C언어#switch#case#계산기#함수
- #C언어#if
- #C언어#사각형
- #alert#자바스크립트#checkbox#alert
- #db#데이터베이스#select
- #db#order#by
- #db#where
- #db#froup#by
- #자바스크립트#회원가입#유효성#검사
- #html#프레임
- #자바스크립트#텍스트#알람#alert
- #C언어#do#while#계산기#함수
- #자바스크립트#접속시간#시간
- #C언어#do#while#계산기
- #db#join#inner#cross
- #getElementById#id
- #자바스크립트#시계#실시간시계
- #C언어#for#간단#예제
- Today
- Total
선택장애
데이터베이스(DB) - CASE WHEN(예제, 문제풀이) 본문
CASE WHEN은 조건에 따라 값을 주는건데 자바에서 if ,else if, else라고 생각하시면 편해요
●기본 문법
CASE 컬럼
WHEN 조건1 THEN 값1
WHEN 조건2 THEN 값2
ELSE 값3
END
(컬럼이 조건1 일때는 값1을, 조건2 일때는 값2를 반환하고 조건에 맞지 않는 경우에는 값3을 반환하는 것입니다)
●앞에서 포스팅했지만 emp테이블 다시 한번 보여드릴게요
●예제
문제 1. DEPTNO컬럼의 10,20,30을 10번부서,20번부서,30번부서로 각각 바꾸고 이름과 바꾼부서 이름을 보이시오
SELECT ename 이름,
CASE WHEN DEPTNO = 10 THEN '10번 부서'
WHEN DEPTNO = 20 THEN '20번 부서'
WHEN DEPTNO = 30 THEN '30번 부서'
END 부서이름
FROM emp;
●이제부터는 앞에 포스팅 했던 NVL과 조인을 합쳐서 한번 해볼게요
●먼저 조인할 dept 테이블입니다.
※dept테이블에는 40부서가 있지만 emp테이블에는 10 20 30만 있습니다.
●예제
문제 1. DEPTNO컬럼의 10,20,30,40을 10번부서,20번부서,30번부서,40번부서로 각각 바꾸고
40번 부서에는 사람이 없으니 '사람없음'을 넣고
사원번호(deptno)와 이름과 부서명을 보이시오 (제가 막 만들고 있는거라서 예제가 이상해요...)
SELECT A.DEPTNO, NVL(B.ename ,'사람없음') 이름 ,
CASE WHEN A.DEPTNO = 10 THEN '10번 부서'
WHEN A.DEPTNO = 20 THEN '20번 부서'
WHEN A.DEPTNO = 30 THEN '30번 부서'
WHEN A.DEPTNO = 40 THEN '40번 부서'
END DEPTNO
FROM dept A LEFT OUTER JOIN emp B
ON A.deptno = B.deptno;
/*외부조인을 해서 부서이름들을 바꾸고 NVL을 이용해서 비어있는곳은 사람없음으로 넣었어요*/
●문제 1번을 조금 더 심화해서 해볼까요
문제 2. DEPTNO컬럼의 10,20,30,40을 10번부서,20번부서,30번부서,40번부서로 각각 바꾸고 부서별로 합계와 평균을 나타내시오.
SELECT CASE WHEN dept.deptno = 10 THEN '10번 부서 '
WHEN dept.deptno = 20 THEN '20번 부서 '
WHEN dept.deptno = 30 THEN '30번 부서 '
WHEN dept.deptno = 40 THEN '40번 부서 '
END deptno,
SUM(SAL+NVL(COMM,0)) 합계 ,ROUND(AVG(SAL+NVL(COMM, 0)),2) 평균
FROM dept LEFT OUTER JOIN emp
ON emp.deptno = dept.deptno
GROUP BY dept.deptno
ORDER BY dept.deptno;
/*ROUND는 소수점을 자르는거에요 2번째자리 까지 잘랐어요
복잡해보이지만 앞 포스팅에서 하나씩 상세히 해드렸으니 천천히 해석해보세요*/
'데이터베이스(DB)' 카테고리의 다른 글
데이터베이스(DB) - 프로시저(기초 정의방법, 삽입 예제,문제풀이) (0) | 2017.08.14 |
---|---|
데이터베이스(DB) - 프로시저(PL/SQL, 제어문 간단설명) (0) | 2017.08.14 |
데이터베이스(DB) - NVL(간단한 예제, 문제풀이) (0) | 2017.08.14 |
데이터베이스(DB) - DELETE문(예제, 문제) (0) | 2017.08.14 |
데이터베이스(DB) - UPDATE문(예제, 문제) (0) | 2017.08.14 |