Oracle динамический DESC и ASC в порядке - PullRequest
8 голосов
/ 10 февраля 2011

Порядок динамический, но порядок сортировки статический.

SELECT ...
Order By CASE WHEN InputParam = 'PRICE' THEN OFFER_PRICE END DESC,
         CASE WHEN InputParam = 'ENDING SOON' THEN EXPIRY_DATE END DESC, 
         CASE WHEN InputParam = 'DISCOUNT' THEN DISC_PERCENTAGE END DESC,
         CASE WHEN InputParam = 'SAVING' THEN SAVING END DESC

Теперь мне нужно убедиться, что порядок сортировки также динамический.Есть ли способ сделать порядок сортировки динамическим в приведенном выше запросе?

Ответы [ 2 ]

16 голосов
/ 10 февраля 2011

Если вы также хотите сделать динамический порядок сортировки (ASC / DESC), вы можете сделать следующее:

SELECT ...
Order By CASE WHEN InputParam = 'PRICE' THEN l_so * OFFER_PRICE END,
         CASE WHEN InputParam = 'ENDING SOON' 
              THEN l_so * (SYSDATE - EXPIRY_DATE) END, 
         CASE WHEN InputParam = 'DISCOUNT' THEN l_so * DISC_PERCENTAGE END,
         CASE WHEN InputParam = 'SAVING' THEN l_so * SAVING END

с переменной l_so, которая содержит 1 или -1 в зависимости от того, какая сортировказаказать вы хотите.

9 голосов
/ 20 мая 2011

Это работает для меня:

order by 
  case when :dir_param = 'ASC' then
    case :col_param 
      when 'col_1_identifier' then col_1_name
      when 'col_2_identifier' then col_2_name
      ...
    end
  end,
  case when :dir_param = 'DSC' then
    case :col_param 
      when 'col_1_identifier' then col_1_name
      when 'col_2_identifier' then col_2_name
      ...
    end
  end desc

или

order by 
case when :dir_param = 'ASC' and :col_param = 'col_1_identifier' then col_1_name end,
case when :dir_param = 'DSC' and :col_param = 'col_1_identifier' then col_1_name end desc,
case when :dir_param = 'ASC' and :col_param = 'col_2_identifier' then col_2_name end,
case when :dir_param = 'DSC' and :col_param = 'col_2_identifier' then col_2_name end desc

заменить литералы, имена переменных и столбцов теми, которые соответствуют вашей ситуации.Oracle, похоже, очень требователен к размещению спецификатора направления сортировки desc.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...