2012-08-28 95 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',而不是來自第一個記錄集的值不如第二個記錄集的值重要。