아래행과 비교 1 2 1,903

by 송민구 [SQL Query] [2014.03.21 22:02:28]


안녕하세요 간만에 글남깁니다 ㅎ

일단 데이터 생김새는 아래와 같습니다.
어떤 조건에 의해 sort 된 결과 상태입니다.

1    LCDLCD
2    LCDLCD
3    LCDLCD
4    PDPPDP
5    PDPPDP
6    PDPPDP
7    L42L42
8    L42L42
9    L42L42
10    LCDLCD
11    PDPPDP
12    PDPPDP
13    L42L42
14    PDPPDP
15    PDPPDP
16    L42L42
17    L42L42
18    LCDLCD
19    L42L42
20    LCDLCD

여기서 위에서 아래로 내려가면서 그룹을 묶다가 값이 달라지면 다른 그룹으로 묶으려고 합니다.
아래처럼 결과가 나오길 기대합니다.
꼭 그룹숫자가 연속적일 필욘없고 순차적이기만 해도 되겠습니다.

1 LCDLCD    1
2 LCDLCD    1
3 LCDLCD    1
4 PDPPDP    2
5 PDPPDP    2
6 PDPPDP    2
7 L42L42    3
8 L42L42    3
9 L42L42    3
10 LCDLCD    4
11 PDPPDP    5
12 PDPPDP    5
13 L42L42    6
14 PDPPDP    7
15 PDPPDP    7
16 L42L42    8
17 L42L42    8
18 LCDLCD    9
19 L42L42    10
20 LCDLCD    11

단순히 아래로 내려가면서 비교하기에 LAG를 써봤지만 LAG로 나온 값에는 덧셈이 안되더군요 ㅎ
고수님은 부탁드립니다 꾸벅
by 마농 [2014.03.24 08:22:43]
WITH t AS
(
SELECT 1 seq, 'LCDLCD' cd FROM dual
UNION ALL SELECT  2, 'LCDLCD' FROM dual
UNION ALL SELECT  3, 'LCDLCD' FROM dual
UNION ALL SELECT  4, 'PDPPDP' FROM dual
UNION ALL SELECT  5, 'PDPPDP' FROM dual
UNION ALL SELECT  6, 'PDPPDP' FROM dual
UNION ALL SELECT  7, 'L42L42' FROM dual
UNION ALL SELECT  8, 'L42L42' FROM dual
UNION ALL SELECT  9, 'L42L42' FROM dual
UNION ALL SELECT 10, 'LCDLCD' FROM dual
UNION ALL SELECT 11, 'PDPPDP' FROM dual
UNION ALL SELECT 12, 'PDPPDP' FROM dual
UNION ALL SELECT 13, 'L42L42' FROM dual
UNION ALL SELECT 14, 'PDPPDP' FROM dual
UNION ALL SELECT 15, 'PDPPDP' FROM dual
UNION ALL SELECT 16, 'L42L42' FROM dual
UNION ALL SELECT 17, 'L42L42' FROM dual
UNION ALL SELECT 18, 'LCDLCD' FROM dual
UNION ALL SELECT 19, 'L42L42' FROM dual
UNION ALL SELECT 20, 'LCDLCD' FROM dual
)
SELECT rn
     , cd
     , SUM(flag) OVER(ORDER BY rn) grp
  FROM (SELECT ROW_NUMBER() OVER(ORDER BY seq) rn
             , cd
             , DECODE(cd, LAG(cd) OVER(ORDER BY seq), 0, 1) flag
          FROM t
        )
;

by 송민구 [2014.03.24 10:37:01]
아 완전 감사합니다. flag까진 만들었는데 sum만 하면 되는걸 왜 생각하지 못했을까요 ㅎㅎ
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입