연속된 데이터를 합쳐서 보여주는 펑션은 어떻게 해야할까요? 0 3 977

by 혜당화 [2015.11.02 08:30:08]


아래와 같이 데이터가 있다고 할때

V_DATA컬럼의 데이터를 FAY0001~FAY0005,FAY054,FAY0080 와 같은 데이터 형태로

연속된 문자+숫자열이면 합치고 중간에 하나씩 있는건 하나만 표현하는식으로 만들고 싶습니다.

감이 안와서 어떻게 짜야할지를 모르겠네요 ㅠㅠ 질문게시판에 올려봅니다.

V_DATA

FAY0001    
FAY0001    
FAY0002    
FAY0003    
FAY0004    
FAY0005    
    
FAY0054    
FAY0054    
 
FAY0080    
FAY0081    
FAY0082    

 

by 우리집아찌 [2015.11.02 08:38:29]

원하는 출력 데이타도 올려주세요.


by 마농 [2015.11.02 09:17:51]
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
;

 


by 혜당화 [2015.11.02 10:54:45]

절대고수 마농님 언제나 감사드립니다.

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