flag값을 구하고 싶습니다. 0 2 754

by 기냥이 [SQL Query] [2014.08.25 10:36:32]


안녕하세요.

쿼리 작성중 궁금한 내용이 있어서 이렇게 글을 남깁니다.

많은 지도 부탁드립니다.

<조회값>

WITH T AS (
 SELECT '공통' AS a,'공통' AS b,'공통' AS c FROM DUAL UNION ALL
 SELECT '공통','공통','개별' FROM DUAL UNION ALL
 SELECT '공통','개별','개별' FROM DUAL UNION ALL
 SELECT '개별','개별','개별' FROM DUAL
)
select
    a,b,c
from
    t

<결과값>

WITH T AS (
 SELECT '공통' AS a,'공통' AS b,'공통' AS c, 'A' flag FROM DUAL UNION ALL
 SELECT '공통','공통','개별', 'B' flag FROM DUAL UNION ALL
 SELECT '공통','개별','개별', 'C' flag FROM DUAL UNION ALL
 SELECT '개별','개별','개별', 'D' flag FROM DUAL
)
select
    a,b,c,flag
from
    t

 

[궁금증]

<조회값>들을 <결과값>과 같이 flag를 넣어서 구분하고 싶습니다.

개인적으로 고민한결과 flag의 값을 구하는 방법으로

1. DECODE를 이용한다

2. UNION을 이용해서 WHERE절로 구분해서 구한다.

이렇게 2가지 방법이 생각이 나는대요.

 

이 방법말고 다른 좋은 방법이 있는지 궁금합니다.

by 비주류 [2014.08.25 12:42:11]

A,B,C 컬럼에서 FLAG 값을 생성해낼만한 규칙이 없다면 DECODE 가 무난할 것 같습니다.

예시의 규칙만 있다면 단순히 '개별' 값의 개수로 ASCII 값 'A' 에 더할수도 있겠네요.

CHR(REGEXP_COUNT(a||b||c, '개별') + ASCII('A'))

CHR((LENGTH(a||b||c)-NVL(LENGTH(REPLACE(a||b||c,'개별','')), 0)) / 2 + ASCII('A'))


by 기냥이 [2014.08.26 09:43:17]

감사합니다.또 다른 신세계를 봤습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입