쿼리로 가능한지 여쭤봅니다. 0 3 1,308

by 도가니 [SQL Query] [2017.04.21 09:43:03]


안녕하세요, 어려운 쿼리를 만들어야 해서 도움 요청하고자 글 남깁니다.

표1 처럼 데이터가 있을때 표2 처럼 표기가 쿼리로 가능할지

도움 요청 드립니다.

 

감사합니다.

 

표1)

PRODUCT SNO
A 1
A 2
A 4
B 3
B 5
B 6

표2)

PRODUCT SNO
A 1-2, 4
B 3, 5-6

 

by jkson [2017.04.21 10:14:11]
with t as 
(
select 'A' as product,1 as sno from dual union all
select 'A',2 from dual union all
select 'A',4 from dual union all
select 'B',3 from dual union all
select 'B',5 from dual union all
select 'B',6 from dual 
)
select product, listagg(sno,',') within group(order by rn) sno
from
(
select product, decode(min(sno),max(sno),min(sno),min(sno)||'-'||max(sno)) sno, min(rn) rn
from
(
select product, to_char(sno) sno, row_number() over(partition by product order by sno) rn 
from t
)
group by product, rn - sno
)
group by product

 


by 마농 [2017.04.21 13:49:18]
SELECT product
     , LISTAGG(DECODE(x, sno, '-', '', '', ',') || sno) WITHIN GROUP(ORDER BY sno) x
  FROM (SELECT product, sno
             , LAG (sno) OVER(PARTITION BY product ORDER BY sno) + 1 x
             , LEAD(sno) OVER(PARTITION BY product ORDER BY sno) - 1 y
          FROM t
        )
 WHERE LNNVL(x = y)
 GROUP BY product
;

 


by jkson [2017.04.21 14:18:19]

LNNVL이 이렇게 사용될 줄이야0-0

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