2016-08-17 72 views
2

我有下面的一组数据(当前数据),其中system_id是特定系统的ID。而pre_system_id是它所依赖系统的ID。现在我需要这样的顺序,即不需要依赖系统的行应该排在第一位,然后使用一个依赖系统的行排在第二位,依此类推。SQL Query基于其他列值对数据进行排序

目前的结果是:

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

如果它在'sql'尝试''system'id'到您的查询顺序。 – BNN

+0

你可以发布你的查询给你**当前数据** – BNN

+0

顺序不会工作,因为我不需要system_id上的数据。它依赖于pre_system_id ..当前数据来自表。 –

回答

0

通过各种PRE_SYSTEM_IDn排序使用nulls first子句的列应该生成您想要的订单:

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的值。

+0

在5,6行主题启动器需要另一个订单。 –

+0

@АнатолийПредеин - 嗯是的,我明白你的意思。我认为这是OP在编辑他们想要的结果时的一个错误。但是,如果他们有一些令人费解的分类,他们需要解释他们的进一步规则。 – APC

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

不是最优雅的解决方案 – APC

+0

其解决方案之一。查询可以有很多解决方案。这是一。我很感谢你的努力 – XING