그룹별 채번 방법 문의 1

by 백재현 [SQL Query] [2022.07.04 21:12:56]


화면 출력시 데이터에 대해 그룹별로 채번을 해서 출력하려합니다.

아래 예제에서  일련번호로 정렬된 데이터를  상품, 값이   변경될때 마다 그룹번호를 채번하는 방법에 대해

조언 구합니다.

(채번 테이블이나 시퀀스 없이 Select 문으로 채번 하고자 합니다.)

 

일련번호   |    상품   |    값    |    그룹번호

 1               A           Y            1

 2               A           Y            1 

 3               A           N            2

 4               A           Y            3

 5               A           Y            3

 6               B           Y            4

 7               B           Y            4

by pajama [2022.07.04 22:33:16]

안녕하세요. lag를 사용했습니다.

 

with t (일련번호, 상품, 값) as (
select 1, 'A', 'Y' from dual union all
select 2, 'A', 'Y' from dual union all
select 3, 'A', 'N' from dual union all
select 4, 'A', 'Y' from dual union all
select 5, 'A', 'Y' from dual union all
select 6, 'B', 'Y' from dual union all
select 7, 'B', 'Y' from dual 
)
select 일련번호, 상품, 값, sum(diff) over(order by 일련번호) + 1 그룹번호
from (
select 일련번호, 
        상품, 
        값,
        case when lag(상품, 1, 상품) over (order by 일련번호) = 상품 AND lag(값, 1, 값) over (order by 일련번호) = 값 then 0 else 1 end diff
from t
)

 


by 백재현 [2022.07.05 09:39:45]

작성해주신 내용으로 원하는 결과 출력됩니다.

한참 헤맸는데 덕분에 또 배우고 갑니다.

감사합니다. 


by 마농 [2022.07.05 09:51:57]
SELECT 일련번호, 상품, 값
     , SUM(diff) OVER(ORDER BY 일련번호) 그룹번호
  FROM (SELECT 일련번호, 상품, 값
             , DECODE(LAG(상품||'-'||값) OVER(ORDER BY 일련번호), 상품||'-'||값, 0, 1) diff
          FROM t
        )
;

 


by 백재현 [2022.07.05 15:49:02]

마농님도 답변 감사드립니다.

참고하겠습니다.

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