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',则该行需要位于结果集的最顶端。你知道如何做到这一点吗?谢谢你,我知道了!非常感谢,这帮助我学习了如何基于列值进行排序。