728x90

스캇님 | 쿼리 | 2013-07-29 12:00:39


안녕하세요. db2 as400을 사용하고 있습니다. 오라클 같은경우는 lead 함수 이용해서 바로 될것 같은데 잘 되지 않네요.
아래와 같은 쿼리는 어떻게 만들어야 되나요? 

고수님들 한수 부탁 드리겠습니다
.

테이블 : emp 

sdate

sabn

etc

20121022

10000

휴가

20130121

10000

휴직

20130601

10000

경영지원


아래의 결과로 도출

sdate

edate

sabn

etc

20121022

20130121

10000

휴가

20130121

20130601

10000

휴직

20130601

현재

10000

경영지원




pajama 2013-07-29 13:41:06
참고하시기 바랍니다.

with emp(sdate,sabn,etc)
as (
values ('20121022',10000,'휴가')
union all values ('20130121',10000,'휴직')
union all values ('20130601',10000,'경영지원')
)
select
sdate,
lead(sdate,1,'현재')over(order by sdate) as edate_1,
coalesce(min(sdate)over(partition by 1 order by sdate rows between 1 following and 1 following), '현재') as edate_2,
sabn, etc
from emp;


http://stackoverflow.com/questions/8124756/teradata-equivalent-for-lead-and-lag-function-of-oracle
http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/admin/r0000780.htm

스캇 2013-07-29 15:32:10
ㅠㅠㅠ. 안되네요. 근데. coalesce(min(sdate)over(partition by 1 order by sdate rows between 1 following and 1 following), '현재') as edate_2, -> 빼야 되지 않나요? 제가 원하는 결과는 sdate,edate,sabn,etc 만 있으면 되는데요..

pajama 2013-07-29 17:24:07
lead 함수는 비교용으로 만든것인데 빼고 실행하셔도 안되시는지요? 

with emp(sdate,sabn,etc)
as (
values ('20121022',10000,'휴가')
union all values ('20130121',10000,'휴직')
union all values ('20130601',10000,'경영지원')
)
select
sdate,
coalesce(min(sdate)over(partition by 1 order by sdate rows between 1 following and 1 following), '현재') as edate
sabn, etc
from emp;

스캇 2013-07-29 20:30:09
감사드립니다. 많은 도움 되었습니다. 항상 행운이 있기를 기원합니다.



728x90

+ Recent posts