인접 로우 플래그에 따라 금액 가져오기 0 2 1,602

by poodle [SQL Query] sql [2017.07.04 18:33:58]


안녕하세요

현재 윈도우 함수를 사용하여 데이터를 조회하면 될 것도 같은데

어떤식으로 쿼리를 짜야 할지 막막해서 질문 드려요

아래와 같은 데이터가 존재하는데 맨밑 하단에 있는 '최종구할값' 컬럼의 금액을 구하고 싶어요

amt컬럼의 금액은 처음 조회할 1번의 amt 값을 추출하고 첫번재 금액으로 flag값이 없는 로우까지 사용

플래그가 O가 존재하면 그 금액으로 다음 O플래그가 나올때까지 사용 해야 해요

어떤식으로 풀어야 할지 막막해요

도움 부탁드려요

with t as (
select 1 num, '3800' amt, '' flag from dual union all
select 2, '3800',''  from dual union all
select 3, '3500','O' from dual union all
select 4, '3800',''from dual union all
select 5, '3900','O' from dual union all
select 6, '3800',''  from dual
)
select*
from t;
 

num amt  flag   최종구할값

1    3800           3800
2    3800           3800
3    3500    O     3500
4    3800           3500
5    3900    O     3900
6    3800           3900

by 마농 [2017.07.04 19:07:14]
SELECT num, amt, flag
     , NVL(LAST_VALUE(DECODE(flag, 'O', amt)) IGNORE NULLS OVER(ORDER BY num), amt) x
  FROM t
;

 


by poodle [2017.07.05 09:42:31]

매번 감사드립니다.

답글보고 찾아보니 많은 정보가 있는데 찾질 못했네요

다음 질문시 좀 더 찾아보고 질문을 드려야 되겠다는 생각이 들었습니다

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