같은 row의 두 컬럼값이 동일 할 때만 다음 seq의 row를 조회하고 싶습니다.. 0 3 1,016

by kimmmmmmm [2016.06.02 14:13:10]


안녕하세요..

작업을 하던 중 해당 쿼리가 가능한건지 여부조차 판단할 수 없어 이렇게 글을 남깁니다..

문제의 데이터는 아래와 같습니다..

with table1 as (
    select '1' as seq, '3500000' as bf_amt, '3500000' as af_amt from dual union all
    select '2' as seq, '1000000' as bf_amt, '0' as af_amt from dual union all
    select '3' as seq, '1000000' as bf_amt, '0' as af_amt from dual
) select *
    from table1

이때 seq 1의 bf_amt와 af_amt가 동일하지 않으면 seq1만 조회가 되야하고

seq가 1의 bf_amt와 af_amt가 동일하면 seq1, 2 (두 row)가 조회되어야 합니다..

그리고 seq 2의 bf_amt와 bf_amt가 동일하면 seq1,2,3(세 row)가 조회되어야 합니다..

 

단순한듯 매우 어려운 것 같습니다..부디 좋은 가르침 부탁드립니다..

 

by 마농 [2016.06.02 15:00:22]
SELECT *
  FROM table1
 WHERE seq <= (SELECT MIN(seq) FROM table1 WHERE bf_amt != af_amt)
;

seq 가 1 부터 시작해서 빈번호 없이 순차적이라고 가정하면
계층쿼리로도 풀 수 있습니다.
 

SELECT *
  FROM table1
 START WITH seq = 1
 CONNECT BY PRIOR seq + 1 = seq
   AND PRIOR bf_amt = PRIOR af_amt
;

 


by 신이만든짝퉁 [2016.06.02 15:05:39]

와우~ 대단하십니다. ^^

아주 간단명료한 필터조건이 나왔네요~


by kimmmmmmm [2016.06.12 17:17:17]

와.. 짝퉁님 말과 같이 간단명료하네요..

감사합니다!

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