SQL Query根据其他列值

时间:2016-08-17 07:14:25

标签: 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          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; 

2 个答案:

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