이름 / 구분 / 일자
황형호 01 20121001
이정훈 01 20140408
배준희 01 20140619
황형호 02 20140619
이정훈 02 20140619
황형호 01 20140804
배준희 02 20140717
김동빈 01 20141101
황형호 02 20141101
배준희 01 20150201
김동빈 02 20150131
황형호 01 20150401
배준희 02 20150401
배준희 01 20150701
황형호 02 20150630
이강재 01 20160405
배준희 02 20160405
배준희 01 20160922
이강재 02 20160922
황형호 01 20170101
배준희 02 20170103
위 구분은 01=선임/02=해임 입니다. 해당 테이블에서 이름/선임일자/해임일자 이렇게 나오게 하려면 어떻게 해야되나요..
ex) 황형호 20121001 20140619
황형호 20140804 20141101 ...
아마 좀 더 좋은 쿼리를 다른 분이 알려주시겠지만 나름대로 올려봤습니다. SELECT CHARGE_NAME, MAX(S1) S1, MAX(S2) S2 FROM ( SELECT CHARGE_NAME, DECODE(CHARGE_CODE, '01', CHARGE_DATE, '') S1, DECODE(CHARGE_CODE, '02', CHARGE_DATE, '') S2 FROM ( SELECT '황형호' CHARGE_NAME, '01' CHARGE_CODE, '20121001' CHARGE_DATE FROM DUAL UNION ALL SELECT '황형호', '02', '20121002' FROM DUAL UNION ALL SELECT '홍길동', '01', '20121001' FROM DUAL UNION ALL SELECT '홍길동', '02', '20121003' FROM DUAL ) ) GROUP BY CHARGE_NAME
SELECT CHARGE_NAME, MAX(S1) S1, MAX(S2) S2 FROM ( SELECT MOK, CHARGE_NAME, DECODE(CHARGE_CODE, '01', CHARGE_DATE, '') S1, DECODE(CHARGE_CODE, '02', CHARGE_DATE, '') S2 FROM ( SELECT FLOOR((ROW_NUMBER() OVER (PARTITION BY CHARGE_NAME ORDER BY CHARGE_NAME, CHARGE_DATE)+1) / 2) MOK, A.* FROM ( SELECT '황형호' CHARGE_NAME, '01' CHARGE_CODE, '20121001' CHARGE_DATE FROM DUAL UNION ALL SELECT '이정훈', '01', '20140408' FROM DUAL UNION ALL SELECT '배준희', '01', '20140619' FROM DUAL UNION ALL SELECT '황형호', '02', '20140619' FROM DUAL UNION ALL SELECT '이정훈', '02', '20140619' FROM DUAL UNION ALL SELECT '황형호', '01', '20140804' FROM DUAL UNION ALL SELECT '배준희', '02', '20140717' FROM DUAL UNION ALL SELECT '김동빈', '01', '20141101' FROM DUAL UNION ALL SELECT '황형호', '02', '20141101' FROM DUAL UNION ALL SELECT '배준희', '01', '20150201' FROM DUAL UNION ALL SELECT '김동빈', '02', '20150131' FROM DUAL UNION ALL SELECT '황형호', '01', '20150401' FROM DUAL UNION ALL SELECT '배준희', '02', '20150401' FROM DUAL UNION ALL SELECT '배준희', '01', '20150701' FROM DUAL UNION ALL SELECT '황형호', '02', '20150630' FROM DUAL UNION ALL SELECT '이강재', '01', '20160405' FROM DUAL UNION ALL SELECT '배준희', '02', '20160405' FROM DUAL UNION ALL SELECT '배준희', '01', '20160922' FROM DUAL UNION ALL SELECT '이강재', '02', '20160922' FROM DUAL UNION ALL SELECT '황형호', '01', '20170101' FROM DUAL UNION ALL SELECT '배준희', '02', '20170103' FROM DUAL )A ORDER BY CHARGE_NAME, CHARGE_DATE, CHARGE_CODE ) ) GROUP BY CHARGE_NAME, MOK ORDER BY CHARGE_NAME, MOK ASC
WITH T AS ( SELECT '황형호' NAME, '01' CODE, '20121001' T_DATE FROM DUAL UNION ALL SELECT '이정훈', '01', '20140408' FROM DUAL UNION ALL SELECT '배준희', '01', '20140619' FROM DUAL UNION ALL SELECT '황형호', '02', '20140619' FROM DUAL UNION ALL SELECT '이정훈', '02', '20140619' FROM DUAL UNION ALL SELECT '황형호', '01', '20140804' FROM DUAL UNION ALL SELECT '배준희', '02', '20140717' FROM DUAL UNION ALL SELECT '김동빈', '01', '20141101' FROM DUAL UNION ALL SELECT '황형호', '02', '20141101' FROM DUAL UNION ALL SELECT '배준희', '01', '20150201' FROM DUAL UNION ALL SELECT '김동빈', '02', '20150131' FROM DUAL UNION ALL SELECT '황형호', '01', '20150401' FROM DUAL UNION ALL SELECT '배준희', '02', '20150401' FROM DUAL UNION ALL SELECT '배준희', '01', '20150701' FROM DUAL UNION ALL SELECT '황형호', '02', '20150630' FROM DUAL UNION ALL SELECT '이강재', '01', '20160405' FROM DUAL UNION ALL SELECT '배준희', '02', '20160405' FROM DUAL UNION ALL SELECT '배준희', '01', '20160922' FROM DUAL UNION ALL SELECT '이강재', '02', '20160922' FROM DUAL UNION ALL SELECT '황형호', '01', '20170101' FROM DUAL UNION ALL SELECT '배준희', '02', '20170103' FROM DUAL ) SELECT NAME,S_D,E_D FROM ( SELECT NAME, CODE, T_DATE, ROW_NUMBER() OVER(PARTITION BY NAME,CODE ORDER BY T_DATE) GB FROM T ) PIVOT(MIN(T_DATE) D FOR CODE IN ('01' S,'02' E)) ORDER BY NAME