순번 먹이기(제발 도와주세요.ㅠㅠㅠㅠ) 0 3 924

by 맹꽁이 [Oracle 기초] [2018.03.21 13:50:21]


순번                데이타

-------------------------------------------------

 

1 10

-------------------------------------------------

 

1 10

2 20

-------------------------------------------------

 

1 10

2 10

3 20

4 20

-------------------------------------------------

 

 

1 10

1 10

2 10

3 20

4 20

5 20

-------------------------------------------------

 

 

1 10

1 10

1 10

2 10

3 20

4 20

5 20

6 20

-------------------------------------------------

 

위의 같은 데이타가 존재할시, 데이타를 보시면 같은 값이 쭉 나오다가 다른값이 나오기 전 데이타의 마지막 로우순번이 달라지면서,

순차적으로 순번을 채번 하고 싶습니다.

 

저의 질문이 정확히 전달이 되었나요?

 

 

쿼리를 어떻게 만들면 될까요? ㅜㅜ.

 

고수님들의 진심어린 조언 부탁드리겠습니다..

by 우리집아찌 [2018.03.21 14:24:05]
-- 조금 부족합니다.

WITH T AS (
SELECT (MOD(LEVEL,2) + 1 ) * 10  V FROM DUAL CONNECT BY LEVEL <= 6
)

SELECT RN + 1 -
       SUM(CASE WHEN MIN_V = V AND RN < MAX_CNT THEN 1 END) OVER(ORDER BY RN) "순번"
     , A.V
  FROM (SELECT V
             , MIN(V) OVER() MIN_V
             , COUNT(*) OVER(PARTITION BY V) MAX_CNT
             , ROW_NUMBER() OVER(ORDER BY V) RN
          FROM T )  A
 ORDER BY RN         

 


by 마농 [2018.03.21 15:21:18]
WITH t AS
(
SELECT 10 v FROM dual
UNION ALL SELECT 10 FROM dual
UNION ALL SELECT 10 FROM dual
UNION ALL SELECT 10 FROM dual
UNION ALL SELECT 20 FROM dual
UNION ALL SELECT 20 FROM dual
UNION ALL SELECT 20 FROM dual
UNION ALL SELECT 20 FROM dual
)
SELECT v
     , SUM(DECODE(rn, 1, 1, x)) OVER(ORDER BY rn) rn
  FROM (SELECT v
             , ROW_NUMBER() OVER(ORDER BY v) rn
             , DECODE(LEAD(v) OVER(ORDER BY v), MIN(v) OVER(), 0, 1) x
          FROM t
        )
;

 


by 맹꽁이 [2018.03.21 15:43:13]

감사합니다 ^^;

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