试试这一个,你会得到你想要的这个结果的情况下,当你有每一个EMPID旧标志。
select curr.empid,curr.empname,
nvl(old.oldlocation,'-') oldlocation,curr.current_location
from
(
select empid,empname,location oldlocation
from empd where flag='old'
) old,
(
select empid,empname,location current_location
from empd where flag='current'
) curr
where old.empid(+)=curr.empid;
如果您有多个旧的标志值是否是一个EMPID那么你可以使用下面给出的查询,这将给当前以及最近的老位置。
select xz.empid,xz.empname,xy.oldloc,xz.currloc
from(
select empid,empname ,location oldloc
from
(
select empid,empname,location,flag,
row_number() over (partition by empid order by rowid desc) rnk
from empd
) where rnk=2) xy,
(
select empid,empname ,location currloc
from
(
select empid,empname,location,flag,
row_number() over (partition by empid order by rowid desc) rnk
from empd
) where rnk=1)xz
where xy.empid(+)=xz.empid;
你能否假设每个'empid'最多只有一个'current'和最多一个'old'行?如果可以有多个“旧”行,您如何知道使用哪个位置? – 2014-11-24 03:42:12
可以检查答案亲爱的两个病例我在答复中说明。 – 2014-11-24 07:27:13