2014-11-24 52 views
0

鉴于表:老和当前位置在单行

empid empname location flag 
1  kumar Hyd  old 
1  kumar Chennai current 
2  mani  warangal current 

我想在下面的格式显示记录

empid empname oldlocation currentlocation 
1  kumar Hyd   Chennai  
2  mani  -   warangal 

请帮我设计一个查询,以获取在上面的格式记录。

+1

你能否假设每个'empid'最多只有一个'current'和最多一个'old'行?如果可以有多个“旧”行,您如何知道使用哪个位置? – 2014-11-24 03:42:12

+0

可以检查答案亲爱的两个病例我在答复中说明。 – 2014-11-24 07:27:13

回答

2

试试这一个,你会得到你想要的这个结果的情况下,当你有每一个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; 
+1

感谢u为答案...这是工作的罚款......感谢很多:-) – 2014-11-25 10:00:03