출처 : PRODBA 카페
다음과 테이블(변경전 테이블)이 있다고 가정했을때 해당 테이블에 ERR_TYPE(오류유형)이라는 컬럼을 추가하고 싶은데요
오류유형 컬럼은 같은 컬럼영문명(COL_ENG_NM)을 대상으로 컬럼한글명, 데이터 타입, 길이를 비교하여 다른것에 대한 오류 유형을 나타나려고 하는데요.
예를 들어 컬럼영문명이 같은데 데이터 타입이 다르면 '데이터 타입 불일치'
컬럼영문명이 같은데 컬럼한글명이 다르면 '컬럼한글명 불일치'
컬럼영문명이 같은데 컬럼길이가 다르면 '데이터 길이 불일치'
이런식으로 '변경후 테이블' 처럼 나타나고 싶습니다.
■ 변경전 테이블
COL_ENG_NM |
COL_HAN_NM |
DATA_TYPE |
LEN |
A |
에이 |
CHAR |
14 |
A |
에이 |
VARCHAR2 |
14 |
B |
비 |
NUMBER |
7 |
B |
삐이 |
NUMBER |
7 |
C |
씨 |
VARCHAR2 |
10 |
C |
씨 |
VARCHAR2 |
12 |
■ 변경후 테이블
COL_ENG_NM |
COL_HAN_NM |
DATA_TYPE |
LEN |
ERR_TYPE |
A |
에이 |
CHAR |
14 |
데이터타입 불일치 |
A |
에이 |
VARCHAR2 |
14 |
데이터타입 불일치 |
B |
비 |
NUMBER |
7 |
컬럼한글명 불일치 |
B |
삐이 |
NUMBER |
7 |
컬럼한글명 불일치 |
C |
씨 |
VARCHAR2 |
10 |
데이터길이 불일치 |
C |
씨 |
VARCHAR2 |
12 |
데이터길이 불일치 |
=>정답 트리플 클릭 SELECT A.COL_ENG_NM,COL_HAN_NM,DATA_TYPE,LEN,NVL(LEAD(A.C) OVER (PARTITION BY A.COL_ENG_NM ORDER BY ROWNUM),A.C)
FROM
(
SELECT DPTEST.*,
DECODE(COL_HAN_NM,NVL(LAG(COL_HAN_NM) OVER (PARTITION BY COL_ENG_NM ORDER BY ROWNUM),COL_HAN_NM),NULL,'컬럼한글명 불일치') ||
DECODE(DATA_TYPE,NVL(LAG(DATA_TYPE) OVER (PARTITION BY COL_ENG_NM ORDER BY ROWNUM),DATA_TYPE),NULL,'데이터타입 불일치') ||
DECODE(LEN,NVL(LAG(LEN) OVER (PARTITION BY COL_ENG_NM ORDER BY ROWNUM),LEN),NULL,'데이터길이 불일치') C
FROM DPTEST
) A
'Oracle > SQL Question' 카테고리의 다른 글
[퀴즈] 조건부 누적쿼리 퀴즈 (0) | 2015.09.14 |
---|---|
[퀴즈] 사과 나눠주기 퀴즈 (0) | 2015.09.14 |
[퀴즈] 집약함수 (0) | 2015.09.14 |
[퀴즈] 구분자로 데이터 나누기 (0) | 2015.09.14 |
[퀴즈] 100~200 숫자중 짝수만 뽑아내기 (0) | 2015.09.14 |