我将尽可能简化问题:
我有一个 oracle 表:
row_priority, col1, col2, col3
0, .1, 100, {null}
12, {null}, {null}, 3
24, .2, {null}, {null}
期望的结果:
col1, col2, col3
.2, 100, 3
因此,根据行的优先级,如果给定,它会覆盖先前的行值。
我正在尝试使用表格上的分析函数来制定解决方案,但它只是没有表现......
我尝试:
select last_value(col1 ignore nulls) over () col1,
last_value(col2 ignore nulls) over () col2,
last_value(col3 ignore nulls) over () col3
from (select * from THE_TABLE order by row_priority)
where rownum = 1
或相反:
select first_value(col1 ignore nulls) over () col1,
first_value(col2 ignore nulls) over () col2,
first_value(col3 ignore nulls) over () col3
from (select * from THE_TABLE order by row_priority desc)
where rownum = 1
而且似乎都没有忽略空值。有什么提示吗?