Oracle 根据2列值排序

Oracle 根据2列值排序,oracle,plsql,Oracle,Plsql,我有一个查询,返回如下输出 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 de

我有一个查询,返回如下输出

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相同的情况下,仍能获得所需的输出,并首先显示它们?任何想法都值得赞赏。我试着做联合等,但没有得到理想的o/p。按fruit_id desc订购不正确,因为订购方式不正确。谢谢

 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
在示例输出中没有显示日期字段,因此我不知道该日期如何分割输出。我猜日期比“相同的键值”更相关,但是你可以把它放在任何你想要的效果的地方

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

虽然这个答案可能是正确和有用的,但如果您在答案中包含一些解释,以解释它如何帮助解决问题,则更可取。这在将来变得特别有用,如果有一个变化(可能无关)导致它停止工作,用户需要了解它曾经是如何工作的。谢谢,是的,这是有效的。我有另一个条件,如果columnA='Y',则该行需要位于结果集的最顶端。你知道如何做到这一点吗?谢谢你,我知道了!非常感谢,这帮助我学习了如何基于列值进行排序。