이런 쿼리 만들 수 있나요? (2) 0 4 847

by 구루업투 [PL/SQL] [2017.06.08 10:46:56]


안녕하세요. 아래 관련한 질의에 대해서 답변을 주셔서 많은 도움이 됐습니다.

추가 질문이 있어서 다시한번더 글 올립니다~꾸벅

 

안녕하세요. 아래 관련한 질의에 대해서 답변을 주셔서 많은 도움이 됐습니다.

추가 질문이 있어서 다시한번더 글 올립니다~꾸벅

 

 

ID VALUE 나라
abc1 aabb 미국
abc1 babb 미국
abc1 cccc 한국
abc2 aaaa 일본

 

위처럼 테이블이 있는데

위 테이블을 기준으로 새로운 테이블을 만들려고합니다.

ID 미국 한국 일본
abc1

ab

 

cc  
abc2     aa

 

어제 질의 드린 것과 조금 다른 케이스 인데요.

첫번째 테이블의 value값을 가운데 두글자만 추출해서 두번째 테이블로 만드는건데..

즉, abc1 미국에는 ab가 중복이라서 한번만 값이 들어가게 됩니다.

어떤식으로 가능할까요??

답변 부탁드립니다!

 

 

 

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

ID VALUE 나라
abc1 aaa 미국
abc1 bbb 미국
abc1 ccc 한국
abc2 aaa 일본

 

위처럼 테이블이 있는데

위 테이블을 기준으로 새로운 테이블을 만들려고합니다.

ID 미국 한국 일본
abc1

aaa

bbb

ccc  
abc2     aaa

 

첫번째 테이블 -> 두번째 테이블로 가공이 가능할까요? 쿼리를 만드려니 쉽지않아서..

동일한 ID를 나라별로 분류하고 싶은데 가능할까요? 

답변부탁드리겠습니다.

감사합니다.

by 마농 [2017.06.08 11:33:30]

1. 줄맞춤이 희안하네요? 특별한 의도가 있는것인지?
  - 그냥 한줄인데 잘못 작성한 것인지?
  - 여러줄임을 표현한 것인지?
2. 중복 제거 해도 여러건인 경우 어떻게 나와야 하는지?
  - 한줄에 구분자로 묶어서 나와야 하는지?
  - 여러줄로 나뉘어 나와야 하는지?


by 구루업투 [2017.06.08 12:40:19]

해석하시는데 헷갈릴 수 있겠네요.

1.한줄입니다.

2.중복 제거한 후 여러건 인 경우에는 구분자로 나와도 되고 여러줄로 나와도 됩니다~ 

데이터만 한 칸에 들어가면 상관없습니다~

 

감사합니다.


by 마농 [2017.06.08 13:24:35]
WITH t AS
(
SELECT 'abc1' id, 'aabb' v, '미국' na FROM dual
UNION ALL SELECT 'abc1', 'babb', '미국' FROM dual
UNION ALL SELECT 'abc1', 'cccc', '한국' FROM dual
UNION ALL SELECT 'abc2', 'aaaa', '일본' FROM dual
UNION ALL SELECT 'abc3', 'aaaa', '한국' FROM dual
UNION ALL SELECT 'abc3', 'aaba', '한국' FROM dual
)
SELECT id
     , LISTAGG(DECODE(na, '미국', x), ',') WITHIN GROUP(ORDER BY x) 미국
     , LISTAGG(DECODE(na, '한국', x), ',') WITHIN GROUP(ORDER BY x) 한국
     , LISTAGG(DECODE(na, '일본', x), ',') WITHIN GROUP(ORDER BY x) 일본
  FROM (SELECT DISTINCT id, SUBSTR(v, 2, 2) x, na FROM t)
 GROUP BY id
;
SELECT *
  FROM (SELECT DISTINCT id, SUBSTR(v, 2, 2) x, na FROM t)
 PIVOT (LISTAGG(x, ',') WITHIN GROUP(ORDER BY x)
        FOR na IN ( '미국' "미국", '한국' "한국", '일본' "일본") )
;

 


by 구루업투 [2017.06.08 14:21:08]

감사합니다!

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