지역 | 미국 | 한국 | 일본 | 중국 |
미국,한국 | A | A | ||
한국,일본 | A | |||
미국 | A | |||
미국,한국,일본 | A | A | A | A |
위 처럼 테이블이 있는데 결과 값으로
지역 | 미국 | 한국 | 일본 | 중국 |
한국,일본 | A |
다음 결과를 추출할 수 있는 쿼리를 작성하고싶은데....잘 안되서 고수분들 도움 좀 부탁드립니다.
부연설명을 드리자면, 지역컬럼 국가들 중에 각행에 A라고 표시 되어있어 있지 않은 것들을 뽑아내면됩니다.(편의상 A로 표시)
맨위에 테이블에서
1행은 미국,한국
미국과 한국은 컬럼에 A를 표시하고 있기 때문에 결과에서 제외.
2행은 한국,일본
한국은 A를 가지고있지만, 일본은 A를 가지고 있지않아서 결과에 포함
3행은 미국
미국은 A를 가지고 있기때문에 결과에서 제외
4행은 미국,한국,일본
미국,한국,일본은 A를 가지고잇기때문에 제외(중국은 있어도 상관없음. 각 지역에 잇는 값들이 기준.)
도움부탁드립니다!
WITH T(지역, 미국, 한국, 일본, 중국) AS ( SELECT '미국,한국', 'A', 'A', '', '' FROM dual UNION ALL SELECT '한국,일본', '', 'A', '', '' FROM dual UNION ALL SELECT '미국', 'A', '', '', '' FROM dual UNION ALL SELECT '미국,한국,일본', 'A', 'A', 'A', 'A' FROM dual ) SELECT 지역, 미국, 한국, 일본, 중국 FROM ( SELECT T.*, REGEXP_COUNT(지역, ',') + 1 cnt, NVL(REGEXP_COUNT(지역, DECODE(미국, 'A', '미국')), 0) cnt1, NVL(REGEXP_COUNT(지역, DECODE(한국, 'A', '한국')), 0) cnt2, NVL(REGEXP_COUNT(지역, DECODE(일본, 'A', '일본')), 0) cnt3, NVL(REGEXP_COUNT(지역, DECODE(중국, 'A', '중국')), 0) cnt4 FROM T ) WHERE cnt <> cnt1 + cnt2 + cnt3 + cnt4 원하시는대로 나오나 모르겠네요 ㅎㅎ