根据 2 列值排序

Order by depending on 2 column values

我有一个查询,returns 输出如下,

SELECT DISTINCT  a.rev_date ,fruitname,
 fruit_id , primary_fruit_id
FROM fruits a, fruit_lookup s,fruit_reference r 
WHERE a.id = s.id(+) 
 and primary_fruit_id = r.fruit_id(+) 
AND (fruit_id = 24 or fruit_id = 0) 
ORDER BY fruit_id desc, a.rev_date desc

如何处理这个问题,以便在 id 和主 id 相同时首先显示它们,我仍然可以获得所需的输出?任何想法表示赞赏。我尝试做 union 等但没有得到想要的 o/p。 fruit_id desc 的顺序不正确,因为这不是正确的顺序 manner.thanks

 NAME       FRUIT_ID    PRIMARY_FRUIT_ID
--------------------------------------
apple       24          24
orange      24          12   
pear        24           7
apple       24          24
kiwi        24           6
apple       24          24   
apple       24          24
melon       24           2  
grape        0          90
banana       0          45
carrot       0          30    

期望的输出

NAME    FRUIT_ID    PRIMARY_FRUIT_ID
--------------------------------------
apple       24          24    
apple       24          24
apple       24          24    
apple       24          24
kiwi        24           6    
orange      24          12   
melon       24           2      
pear        24           7
grape        0          90
banana       0          45
carrot       0          30  

试试这个:

ORDER BY fruit_id desc, abs(fruit_id-PRIMARY_FRUIT_ID) asc

您想生成一个值,以便根据您想要的条件进行排序。

ORDER BY fruit_id desc,
         a.rev_date desc,
         case when fruit_id = primary_fruit_id then 0 else 1 end

您没有在示例输出中显示日期字段,所以我不知道该日期如何分割输出。我猜日期比 "same key value" 更相关,但您可以将它放在任何能给您想要的效果的地方。

ORDER BY fruit_id desc,
         case when fruit_id = primary_fruit_id then 0 else 1 end,
         a.rev_date desc

ORDER BY case when fruit_id = primary_fruit_id then 0 else 1 end,
         fruit_id desc,
         a.rev_date desc