레벨로 정리되어 나온 결과값 원하는 레코드까지만 출력 못하나요? 1 5 1,343

by 안녕하심쇼 [SQL Query] 오라클 레벨 [2014.10.14 11:30:18]


level 컬럼  |  데이터 컬럼

1              |  A

2              |  B

2              |  C

3              |  D

1              |  E

2              |  F

2              |  G

이런식으로 조회를 했는데요. 이것을 처음 시작되는 레벨1 행부터 다음 레벨1 행까지만 출력하는 방법은 없는건가요?

by 비주류 [2014.10.14 14:13:55]
-- 좀더 간결한 방법이 있을 것 같지만 생각나는대로 적어봅니다.
WITH T AS (
    SELECT 1 ID, NULL PID, 'A' VAL FROM DUAL UNION ALL
    SELECT 2 ID, 1 PID, 'B' VAL FROM DUAL UNION ALL
    SELECT 3 ID, 1 PID, 'C' VAL FROM DUAL UNION ALL
    SELECT 4 ID, 2 PID, 'D' VAL FROM DUAL UNION ALL
    SELECT 5 ID, NULL PID, 'E' VAL FROM DUAL UNION ALL
    SELECT 6 ID, 5 PID, 'F' VAL FROM DUAL UNION ALL
    SELECT 7 ID, 5 PID, 'G' VAL FROM DUAL
)
SELECT  V2.LV, VAL
FROM    (
            SELECT  V.*, COUNT(DECODE(RNK, 1, 1)) OVER () CNT
            FROM    (
                        SELECT  LEVEL LV, VAL,
                                DENSE_RANK() OVER (ORDER BY CONNECT_BY_ROOT ID) RNK,
                                ROWNUM RN
                        FROM    T
                        START WITH PID IS NULL
                        CONNECT BY PRIOR ID = PID
                        ORDER BY ID
                    ) V
        ) V2
WHERE   RNK = 1 OR RN = CNT + 1;

 


by 백면서생 [2014.10.14 14:52:20]
-- 이런 방법도.

with t as
(
  select 1 rn, 1 lv , 'A' data from dual union all
  select 2 rn, 2 lv , 'B' data from dual union all
  select 3 rn, 2 lv , 'C' data from dual union all
  select 4 rn, 3 lv , 'D' data from dual union all
  select 5 rn, 1 lv , 'E' data from dual union all
  select 6 rn, 2 lv , 'F' data from dual union all
  select 7 rn, 2 lv , 'G' data from dual 
)
select rn,lv,data,grp
from 
(
select rn,lv,data
      ,sum(decode(lv,1,1)) over (order by rn rows between unbounded preceding and 1 preceding) grp
from t
)
where nvl(grp,1) = 1

 


by 비주류 [2014.10.14 16:12:16]

간결하네요~


by 오라클초보 [2014.10.16 18:28:45]

sum(decode(lv,1,1)) over (order by rn rows between unbounded preceding and 1 preceding)

이부분의 원리 좀 설명 부탁드려도 될까요??


by 안녕하심쇼 [2014.10.14 15:51:35]

두 분 답변 감사합니다. 컨트롤 딴에서 처리해버렸는데 답변 달아준 쿼리로 수정해서도 해봐야겠네요. 감사합니다.

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