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
我应该使用连接吗?你可以请教我怎么解决这个问题?
我有以下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
我应该使用连接吗?你可以请教我怎么解决这个问题?
不,您希望将记录放在彼此之上,因此您需要使用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'
,而不是来自第一个记录集的值不如第二个记录集的值重要。
在看'Id = 2'时,你想要'isVal'的值?在记录集1中指定的'Y',或者在记录集2中的'N'?记录集1的值始终优先于记录集2的值吗?如果'Id'存在于两个表中,或者'Y'总是优先于'N'? – Glenn