쿼리질문이요. 0 3 683

by ekekekek [Oracle 기초] [2018.11.02 11:50:16]


NO

NAME DEPT M_NO   M_NO YEAR
1 홍길동1 부서1 1, 2, 3   1 2014
2 홍길동2 부서2 1   2 2015
3 홍길동3 부서3 3, 5   3 2016
4 홍길동4 부서4 2   4 2017
          5 2018

                           TABLE                                                     SUBTABLE

현재 데이터가 들어있는 테이블 형태 입니다.

SELECT 를 해올때 TABLE과 SUBTABLE 테이블에 있는 M_NO데이터를 활용해서 SUBTABLE에 매칭되는 년도 데이터를 가져오고 싶은데

현재 서브쿼리를 사용하니 M_NO이 한개인 데이터는 연도데이터를 가져오는데

M_NO데이터가 여러개인 데이터는 NULL값을 가져오는데

현재 사용중인 쿼리 형태입니다.

SELECT NO, NAME, DEPT, M_NO,

(SELECT YEAR FROM SUBTABLE WHERE M_NO LIKE REPLACE(RTRIM(AA.M_NO,','),',,',',')) AS YEAR

FROM TABLE AA;

 

아래 테이블과 같이 데이터를 가져오고 싶은데 어떤식으로 가져오면 될까요?

NO NAME DEPT M_NO YEAR
1 홍길동1 부서1 1, 2, 3 2014, 2015, 2016
2 홍길동2 부서2 1 2014
3 홍길동3 부서3 3, 5 2016, 2018
4 홍길동4 부서4 2 2015

 

by 무지버기 [2018.11.02 14:16:20]
WITH t(no,name,dept,m_no) AS (
    SELECT 1,'홍길동1','부서1', '1,2,3' FROM DUAL UNION ALL
    SELECT 2,'홍길동2','부서2', '1'     FROM DUAL UNION ALL
    SELECT 3,'홍길동3','부서3', '3,5'   FROM DUAL UNION ALL
    SELECT 4,'홍길동4','부서4', '2'     FROM DUAL
),
t1(m_no,year) AS (
    SELECT '1', '2014' FROM DUAL UNION ALL
    SELECT '2', '2015' FROM DUAL UNION ALL
    SELECT '3', '2016' FROM DUAL UNION ALL
    SELECT '4', '2017' FROM DUAL UNION ALL
    SELECT '5', '2018' FROM DUAL
)
-- 마농님의 댓글로 작성해 봤습니다.
-- 1번째 방법
SELECT
  a.no
, a.name
, a.dept
, LISTAGG(b.year,',') WITHIN GROUP(ORDER BY INSTR(','||a.m_no||',',','||b.m_no||','))
FROM t a, t1 b
WHERE INSTR(','||a.m_no||',',','||b.m_no||',') > 0
GROUP BY a.no,a.name,a.dept

-- 2번째 방법
SELECT 
  no
, name
, dept
, (SELECT TO_CHAR(WM_CONCAT(year)) FROM t1 a WHERE REGEXP_LIKE(b.m_no,a.m_no))
FROM t b

 


by ekekekek [2018.11.02 16:00:32]

감사합니다. 알려주신방법으로 해결을 했습니다.

알려주신방법으로 해결한 후 년도별로 데이터가

2013,2014,2015,2016,2017,2019 이런식으로 컬럼 한개에 값이 모여서 나오게 됬는데

해당 년도별로 컬럼을 따로 나누어서 년도별로 값이 있으면 해당 컬럼으로

년도값을 넣어주고 싶은데...방법이있을까요?

NO

NAME DEPT M_NO YEAR Y_2013 Y_2014 Y_2015 Y_2016
1 홍길동1 부서1 1, 2, 3 2014, 2015, 2016   2014 2015 2016
2 홍길동2 부서2 1 2014   2014    
3 홍길동3 부서3 3, 5 2016, 2018       2016
4 홍길동4 부서4 2 2015     2015  

by 야신 [2018.11.03 18:46:22]

쿼리로는 동적으로 컬럼 추가는 할수 없습니다.

년월컬럼 개수를 지정해야 됩니다.

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