쿼리 도움 부탁드립니다! 0 4 188

by 구루업투 [SQL Query] [2017.10.10 15:29:03]


지역 미국 한국 일본 중국
미국,한국 A A    
한국,일본   A    
미국 A      
미국,한국,일본 A A A A

위 처럼 테이블이 있는데 결과 값으로

지역 미국 한국 일본 중국
한국,일본   A    

 

다음 결과를 추출할 수 있는 쿼리를 작성하고싶은데....잘 안되서 고수분들 도움 좀 부탁드립니다.

부연설명을 드리자면, 지역컬럼 국가들 중에 각행에  A라고 표시 되어있어 있지 않은 것들을 뽑아내면됩니다.(편의상 A로 표시) 

 

맨위에 테이블에서

1행은 미국,한국 

미국과 한국은 컬럼에 A를 표시하고 있기 때문에 결과에서 제외.

 

2행은 한국,일본

한국은 A를 가지고있지만, 일본은 A를 가지고 있지않아서 결과에 포함

 

3행은 미국

미국은 A를 가지고 있기때문에 결과에서 제외

 

4행은 미국,한국,일본

미국,한국,일본은 A를 가지고잇기때문에 제외(중국은 있어도 상관없음. 각 지역에 잇는 값들이 기준.)

 

도움부탁드립니다!

by 랑에1 [2017.10.10 15:50:13]

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
원하시는대로 나오나 모르겠네요 ㅎㅎ

by 구루업투 [2017.10.10 16:24:01]

답변 감사합니다!


by jkson [2017.10.10 15:54:52]
SELECT * 
FROM T
WHERE 
INSTR(지역,'미국') > 0 AND 미국 IS NULL
OR INSTR(지역,'한국') > 0 AND 한국 IS NULL
OR INSTR(지역,'일본') > 0 AND 일본 IS NULL
OR INSTR(지역,'중국') > 0 AND 중국 IS NULL

 


by 구루업투 [2017.10.10 16:24:26]

잘되네요!! 답변 감사합니다! 

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