我有以下数据集(当前数据),其中system_id是特定系统的ID。 pre_system_id是它所依赖的系统的ID。现在我需要这样的顺序,即没有依赖系统的行应该首先出现,然后有一个依赖系统的行排在第二位,依此类推。
目前的结果:
System_ID PRE_SYSTEM_ID1 PRE_SYSTEM_ID2 PRE_SYSTEM_ID3 PRE_SYSTEM_ID4
106 100
105
112 105 100 109
100
109 100 105
119 100 109 105 112
102 112 109
104 109 106
实际结果应如下所示:
Order System_ID PRE_SYSTEM_ID1 PRE_SYSTEM_ID2 PRE_SYSTEM_ID3 PRE_SYSTEM_ID4
1 100
2 105
3 106 100
4 109 100 105
5 112 105 100 109
6 119 100 109 105 112
7 104 109 106
8 102 112 109 104
查询当前结果只是
Select * from ImpactedSystem;
答案 0 :(得分:0)
使用nulls first
子句按各种PRE_SYSTEM_IDn列进行排序应生成所需的顺序:
select *
from ImpactedSystem
order by PRE_SYSTEM_ID1 nulls first,
PRE_SYSTEM_ID2 nulls first,
PRE_SYSTEM_ID3 nulls first,
PRE_SYSTEM_ID4 nulls first,
SYSTEM_ID
最后按SYSTEM_ID排序,以排序没有依赖ID的值。
答案 1 :(得分:0)
您也可以使用以下查询来获取结果。
select *
from Current_data
order by DECODE(pre_system_td1,null,1),
DECODE(pre_system_td2,null,1),
DECODE(pre_system_td3,null,1),
DECODE(pre_system_td4,null,1);