我有一个表格,其中存储了ID,参考ID和金额。问题是,对于设置了引用ID的行,缺少数量。我需要读取reference_id = ID的行并读取数量并设置值(如表2所示)。
+--+------------+------+
|ID|Reference ID|Amount|
+--+------------+------+
|1 | |300 |
+--+------------+------+
|2 |1 | |
+--+------------+------+
我希望能够展示: 表2
+--+------------+------+
|ID|Reference ID|Amount|
+--+------------+------+
|1 | |300 |
+--+------------+------+
|2 |1 |300 |
+--+------------+------+
任何人都知道找到这个缺失值的最佳方法是什么? 最好的祝福。 MEJ
答案 0 :(得分:3)
我想你想要一个自我加入:
select t1.id, t1.referenceid, coalesce(t2.amount, t1.amount) as amount
from table1 t1 left outer join
table1 t2
on t1.id = t2.referenceid;
答案 1 :(得分:3)
我认为您需要分层查询:
select id, ref_id, connect_by_root amount
from <your table>
connect by prior id = ref_id
start with ref_id is null;
有关connect_by_root
operator in the documentation的更多信息。
此allows for multiple levels因为它始终返回amount
的根目录。但是,这种假设儿童记录本身从未有amount
,或者可以忽略。如果设置了子值,则可以使用nvl
,但子节点的子节点仍会返回到根节点。如果要显示以前的值,可以在条件中添加amount
空检查:
select id, ref_id, connect_by_root amount as amount
from <your table>
connect by prior id = ref_id and amount is null
start with ref_id is null or amount is not null
order by id;