쿼리 질문입니다. 0 1 1,826

by miiooo [2015.11.13 17:47:55]


안녕하세요 쿼리 질문이 있어서 글등록 합니다.

A B
1 a
1 b
2 c
2 d
2 e
2 f
3 g
3 h
3 i
3 j
3 k
3 l

 테이블에 위와 같은 데이터가 있는데 이 데이터를 아래와 같은 결과로 표출해야 합니다.

ST_DT와 ED_DT는 A의 값이며, COUNT의 값은 중복 제거 된 B값 입니다.

A가 1보다 크거나 같고 1보다 작거나 같으면 COUNT값은 2가 되고,

A가 1보다 크거나 같고 2보다 작거나 같으면 COUNT값은 6이 되게끔 결과가 나와야 합니다.

A가 2보다 크거나 같고 2보다 작거나 같으면 COUNT값은 4가 되는거구요

혹시 방법 아시는분들은 댓글 달아주시면 감사하겠습니다.

ST_DT ED_DT COUNT
1 1 2
1 2 6
2 2 4
1 3 12
2 3 10
3 3 6

 

by 마농 [2015.11.15 13:03:41]
WITH t AS
(
SELECT 1 a, 'a' b FROM dual
UNION ALL SELECT 1, 'b' FROM dual
UNION ALL SELECT 2, 'c' FROM dual
UNION ALL SELECT 2, 'd' FROM dual
UNION ALL SELECT 2, 'e' FROM dual
UNION ALL SELECT 2, 'f' FROM dual
UNION ALL SELECT 3, 'g' FROM dual
UNION ALL SELECT 3, 'h' FROM dual
UNION ALL SELECT 3, 'i' FROM dual
UNION ALL SELECT 3, 'j' FROM dual
UNION ALL SELECT 3, 'k' FROM dual
UNION ALL SELECT 3, 'l' FROM dual
)
SELECT CONNECT_BY_ROOT(a) st_dt
     , a ed_dt
     , LENGTH(REPLACE(SYS_CONNECT_BY_PATH(b, ','), ',')) cnt
  FROM (SELECT a
             , LISTAGG(b) WITHIN GROUP(ORDER BY b) b
             , ROW_NUMBER() OVER(ORDER BY a) rn
          FROM t
         GROUP BY a
        )
 CONNECT BY PRIOR rn + 1 = rn
 ORDER BY ed_dt, st_dt
;

 

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