基于其他列值的订单数据SQL查询
我有以下一组数据(当前数据),其中system_id是特定系统的id。pre_system_id是它所依赖的系统的id。现在我需要这样的顺序,没有依赖系统的行应该排在第一位,然后有一个依赖系统的行排在第二位,依此类推 目前的结果是:基于其他列值的订单数据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 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编辑他们想要的结果时的一个输入错误。然而,如果他们有一些复杂的排序,他们需要解释他们的进一步规则。