아래와 같이 데이터가 있다고 할때
V_DATA컬럼의 데이터를 FAY0001~FAY0005,FAY054,FAY0080 와 같은 데이터 형태로
연속된 문자+숫자열이면 합치고 중간에 하나씩 있는건 하나만 표현하는식으로 만들고 싶습니다.
감이 안와서 어떻게 짜야할지를 모르겠네요 ㅠㅠ 질문게시판에 올려봅니다.
V_DATA
FAY0001
FAY0001
FAY0002
FAY0003
FAY0004
FAY0005
FAY0054
FAY0054
FAY0080
FAY0081
FAY0082
WITH t AS ( SELECT 'FAY0001' v_data FROM dual UNION ALL SELECT 'FAY0001' FROM dual UNION ALL SELECT 'FAY0002' FROM dual UNION ALL SELECT 'FAY0003' FROM dual UNION ALL SELECT 'FAY0004' FROM dual UNION ALL SELECT 'FAY0005' FROM dual UNION ALL SELECT 'FAY0054' FROM dual UNION ALL SELECT 'FAY0054' FROM dual UNION ALL SELECT 'FAY0080' FROM dual UNION ALL SELECT 'FAY0081' FROM dual UNION ALL SELECT 'FAY0082' FROM dual ) SELECT LISTAGG(v_data_fr|| DECODE(cnt, 1, '', '~'||v_data_to), ',') WITHIN GROUP(ORDER BY v_data_fr) v_data FROM (SELECT gb , MIN(v_data) v_data_fr , MAX(v_data) v_data_to , COUNT(DISTINCT v_data) cnt FROM (SELECT SUBSTR(v_data, 1, 3) gb , v_data , SUBSTR(v_data, 4, 4) - DENSE_RANK() OVER( PARTITION BY SUBSTR(v_data, 1, 3) ORDER BY SUBSTR(v_data, 4, 4) ) grp FROM t ) GROUP BY gb, grp ) GROUP BY gb ORDER BY gb ;