아래 데이터가 휴가 유형별 일자로 그룹핑되어 아래와 같이 표현하려면 어떻게 해야 하나요?!
SELECT CASE WHEN MIN(일자) = MAX(일자) THEN MAX(일자)
ELSE MIN(일자) ||'~'|| MAX(일자)
END AS WORK_DE,
오전,
오후
FROM 휴가테이블
GROUP BY 오전,오후;
이렇게되면 근무 유형별로 날짜가 나올수 없어서요..
일자 오전 오후
20181108 일반연차
20181109 일반연차 일반연차
20181112 대체휴무 대체휴무
20181113 일반연차 일반연차
20181114 일반연차 일반연차
20181115 일반연차
=>
20181108 일반연차
20181109 일반연차 일반연차
20181112 대체휴무 대체휴무
20181113
~20181114 일반연차 일반연차
20181115 일반연차
WITH t AS ( SELECT '20181108' dt, '' am, '일반연차' pm FROM dual UNION ALL SELECT '20181109', '일반연차', '일반연차' FROM dual UNION ALL SELECT '20181112', '대체휴무', '대체휴무' FROM dual UNION ALL SELECT '20181113', '일반연차', '일반연차' FROM dual UNION ALL SELECT '20181114', '일반연차', '일반연차' FROM dual UNION ALL SELECT '20181115', '일반연차', '' FROM dual ) SELECT MIN(dt) || DECODE(COUNT(*), 1, '', '~'||MAX(dt)) dt , am , pm FROM (SELECT dt, am, pm , TO_DATE(dt, 'yyyymmdd') - ROW_NUMBER() OVER(PARTITION BY am, pm ORDER BY dt) gb FROM t ) GROUP BY am, pm, gb ORDER BY dt ;