Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Сортировка по условию  [new]
dar3000
Member

Откуда:
Сообщений: 123
Задача - сортировать данные в зависимости от значения поля.
Например, сортируем сначала по полю1, затем в зависимости от его значений нужна сортировка либо по полю2, либо по полю3.
Вообщем, на первый взгляд, решение создать дополнительное поле содержащее значения в зависимости от "поля условий". Это работает.
В случае, если сложность сортировки возрастает, может потребоваться несколько дополнительных полей. Кроме того, как быть в случае если сортируемые поля имеют разные типы данных? Уже так просто в одно поле их не сведешь. Может у Oracle есть стандартное решение?
30 авг 12, 03:36    [13086274]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка по условию  [new]
dar3000
Member

Откуда:
Сообщений: 123
Наверное с кодом будет понятнее.
select f1,f2,f3,
case f1 when '1' then f2 else f3 end as ysl
from test
order by f1,ysl
30 авг 12, 03:56    [13086281]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка по условию  [new]
-2-
Member

Откуда:
Сообщений: 15330
dar3000
на первый взгляд, решение создать дополнительное поле
взгляд у тебя косоглазый
dar3000
как быть в случае если сортируемые поля имеют разные типы данных?
Если эти признаки сортировки имеют разный тип, очевидно, что они изолированы по другому критерию. иначе, нужен алгоритм сведения вкуса и цвета к общему знаментаелю в метрах.

критерий1, null, null, null, число
критерий2, null, дата, null, null
30 авг 12, 04:27    [13086285]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка по условию  [new]
dar3000
Member

Откуда:
Сообщений: 123
Что-то не соображу, как получить нечто типа:
select f1,f2,f3
from test
order by f1,case f1 when '1' then f2 asc else f3 desc end
понятно, что это не рапботает. Но смысл передает - нужно, чтобы сортировка выполнялась в случае поля2 asc, а в случае поля3 desc.
30 авг 12, 07:02    [13086320]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка по условию  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18484
Как вариант
order by f1, decode(f1, '1', f2) asc, decode(f1, '1', null, f3) desc

Ну и всякие вариации, типо для числовых добавлять минус и сортировать по возрастанию и т.п.
30 авг 12, 07:12    [13086333]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить