이런 쿼리 가능한가요? 0 6 995

by 구루업투 [2017.06.29 10:15:35]


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

각 지역에 있는 값을 보고 해당 지역에 A가 들어있는지 확인하는 쿼리를 짜고싶은데 가능할까요?

예를 들면

첫번째 행에 지역이 미국,일본인데

미국에만 A가 들어가 있습니다.  미국,일본 두개에 A가 있어야 하는데 일본이 없기 떄문에 해당 행을 출력 해야합니다.

 

위에서 출력 되어야 하는 값은

첫번째 행과 세번 째 행입니다.

두번째 행은 지역에 있는 조건에 만족하므로 출력되지 않아야하구요.(한국과 일본에 둘다 A가 존재)

 

도움부탁드립니다!

by jkson [2017.06.29 10:44:25]
with t as
(
select null kor, 'A' us, null jp, '미국,일본' rgn from dual union all 
select 'A' kor, null us, 'A' jp, '한국,일본' rgn from dual union all 
select 'A' kor, null us, 'A' jp, '한국,미국,일본' rgn from dual
)
select *
  from t
 where nvl(decode(kor,'A','1')||decode(us,'A','2')||decode(jp,'A','3'),'*') !=
       nvl(decode(sign(instr(rgn,'한국')),1,'1')||decode(sign(instr(rgn,'미국')),1,'2')||decode(sign(instr(rgn,'일본')),1,'3'),'*')

 


by 구루업투 [2017.06.29 16:11:31]

감사합니다!


by 신이만든짝퉁 [2017.06.29 10:46:55]
WITH T  (KOR, USA, JPN, AREA) AS 
(   SELECT NULL, 'A', NULL, '미국,일본' FROM DUAL UNION ALL
    SELECT NULL, 'A', 'A',  '일본,미국' FROM DUAL UNION ALL
    SELECT 'A', NULL, 'A' , '한국,일본' FROM DUAL UNION ALL
    SELECT 'A', 'A', 'A' , '한국,일본' FROM DUAL UNION ALL
    SELECT 'A', 'A', 'A' , '한국,한국' FROM DUAL UNION ALL
    SELECT 'A', NULL, 'A' , '한국,미국,일본' FROM DUAL
)
SELECT *
  FROM T
 WHERE NOT(    NVL2(KOR, 1, 0) = REGEXP_COUNT(AREA, '한국')
           AND NVL2(USA, 1, 0) = REGEXP_COUNT(AREA, '미국')
           AND NVL2(JPN, 1, 0) = REGEXP_COUNT(AREA, '일본'));

요청사항에 나와있지 않는 경우의 수가 더 있습니다.

위 쿼리를 보시고 원하시는 데이터인지 확인해보세요.


by 구루업투 [2017.06.29 16:11:42]

감사합니다!


by 마농 [2017.06.29 10:51:58]
WITH t AS
(
SELECT '' 한국, 'A' 미국, '' 일본, '미국,일본' 지역 FROM dual
UNION ALL SELECT 'A', '', 'A', '한국,일본' FROM dual
UNION ALL SELECT 'A', '', 'A', '한국,미국,일본' FROM dual
)
SELECT *
  FROM t
 WHERE NVL2(한국, 1, 0) != SIGN(INSTR(지역, '한국'))
    OR NVL2(미국, 1, 0) != SIGN(INSTR(지역, '미국'))
    OR NVL2(일본, 1, 0) != SIGN(INSTR(지역, '일본'))
;

 


by 구루업투 [2017.06.29 16:12:25]

감사합니다! 항상 배우고갑니다 ^^

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