2012-08-28 54 views
0

我有以下2次的记录:合并两个记录在Oracle

记录1:

Id isVal isVal1 
1 Y  N 
2 Y  N 

记录2:

Id isVal isVal1 
2 N  Y 
3 N  Y 

需要实际记录是:

Id isVal isVal1 
1 Y  N 
2 Y  Y 
3 N  Y 

我应该使用连接吗?你可以请教我怎么解决这个问题?

+0

在看'Id = 2'时,你想要'isVal'的值?在记录集1中指定的'Y',或者在记录集2中的'N'?记录集1的值始终优先于记录集2的值吗?如果'Id'存在于两个表中,或者'Y'总是优先于'N'? – Glenn

回答

1

不,您希望将记录放在彼此之上,因此您需要使用union

select id, max(isval) as isval, max(isval1) as isval1 
    from (select id, isval, isval1 
      from recordset1 
      union all 
     select id, isval, isval1 
      from recordset1 
       ) 
group by id 

我用union all因为你并不需要删除重复,为此你会删除all

max的工作原理是因为'Y''N'“大”。

我假设'Y'优先于'N',而不是来自第一个记录集的值不如第二个记录集的值重要。