基于其他列值的订单数据SQL查询

基于其他列值的订单数据SQL查询,sql,oracle,Sql,Oracle,我有以下一组数据(当前数据),其中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

我有以下一组数据(当前数据),其中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; 

使用
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

最后,按系统ID排序,以对没有依赖ID的值进行排序。

您也可以使用下面的查询来获得结果

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);

如果它在
sql
中,请尝试将
orderby
system\u id
添加到您的查询中。您是否可以发布您的查询,该查询提供当前的数据order by将不起作用,因为我不需要有关system\u id的数据。这取决于pre\u system\u id。。当前数据来自表。@ThejKumar:显示您当前查询的更多信息堆栈,它只是来自表的数据。从受影响的系统中选择*;它将给出当前的数据,而不是最优雅的解决方案,它是解决方案之一。一个查询可以有很多解决方案。这是一个。我很感谢您的努力,还有5,6行。我们需要另一个订单。@АааааПаааааааааа。我假设这是OP编辑他们想要的结果时的一个输入错误。然而,如果他们有一些复杂的排序,他们需要解释他们的进一步规则。