2015-03-09 6 views
1

У меня есть запрос, который возвращает результат, как показано ниже,Сортировка в зависимости от 2 столбца значения

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 

Как справиться с этим так, что я до сих пор получить желаемый результат, где, когда и идентификатор и первичный идентификатор одинаковы показать их первым? любая идея приветствуется. Я пробовал делать соединение и т. Д., Но не получал желаемого о/р. Порядок по fruit_id убыв не является правильным, так как это не приказывать в правильных 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 

ответ

2

Вы хотите создать значение просто для сортировки в зависимости от состояния, которое вы хотите.

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

Спасибо, да это работает. У меня есть другое условие, когда если columnA = 'Y', то эта строка должна находиться на самой вершине набора результатов. любая идея, как это можно достичь? спасибо – user747291

+0

Nevermind я понял это! Большое спасибо, это помогло мне научиться упорядочиваться на основе значений столбцов. – user747291

1

Попробуйте это:

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

Хотя этот ответ, вероятно, правильный и полезный, предпочтительно включить в него некоторое объяснение, чтобы объяснить, как оно помогает решить проблему. Это становится особенно полезным в будущем, если есть изменения (возможно, не связанные), которые заставляют его перестать работать, и пользователи должны понимать, как он работал. –