Сейчас возникла реальная проблема.
При выборке в в SQL в ORACLE (SELECT...) делается сортировка (ORDER BY...)
При этом есть поле, назовем его SORT_FIELD, среди значений которого есть "B", "M", "O" (английский алфавит).
Есть и другие значения, но они при сортировке роли не играют.
Задача. Так задать сортировку, чтобы все строки со значением "M" были позже всех строк со значением "B" и "O"
(взаимное расположение "B" и "O" роли не играет).
Вот такая проблема.
Я совсем не уверен, что она имеет решение. Но а вдруг у кого есть идея?
Можно ли ухитриться сделать такую сортировку?
Модератор: Саша З.
ну так на вскидку... создайте дополнительную таблицу из двух полей... В одном поле эти ваши буквы, в другой индекс по которому хотите их сортировать...
Сделайте джойнт полей с буквами в основной и вспомогательной таблице, а сортируйте по индексу из вспомогательной...
Сделайте джойнт полей с буквами в основной и вспомогательной таблице, а сортируйте по индексу из вспомогательной...
Спрашивайте в магазинах города – новый «Чупа-Чупс» на эбонитовой палочке. Соси – и вырабатывай электричество, так необходимое твоему государству!
Значенте поля не эти буквы, а начинаются с этих букв.
Пример для MYSQL
Код: Выделить всё
ORDER by SUBSTRING(SORT_FIELD,1,1)='M'
Видимо подобное может быть для DECODE
-
- Участник со стажем
- Сообщения: 1304
- Зарегистрирован(а): 18 ноя 2001, 02:00
- Откуда: Петах-Тиква
- Контактная информация:
Яков, ну что вы право...
Юрий,
100% в оракл будет такой вариант
order by decode(SUBSTRING(SORT_FIELD,1,1), 'M', 100000, ascii(sort_field))
В конце концов можно написать свою функцию которая вернет вес слова, либо поменяет буквы:
Скажем в это случае можно:
Order by replace(sort_field,'M', chr(ascii('Z')+1)))
Тогда сортировка будет совсем правильная, а не только по первым буквам.
Со своей функцией:
order by my_function(sort_field)
Если таблицы большие, стоит подумать о функциональных индексах :D
Юрий,
100% в оракл будет такой вариант
order by decode(SUBSTRING(SORT_FIELD,1,1), 'M', 100000, ascii(sort_field))
В конце концов можно написать свою функцию которая вернет вес слова, либо поменяет буквы:
Скажем в это случае можно:
Order by replace(sort_field,'M', chr(ascii('Z')+1)))
Тогда сортировка будет совсем правильная, а не только по первым буквам.
Со своей функцией:
order by my_function(sort_field)
Если таблицы большие, стоит подумать о функциональных индексах :D
Отличительная черта большинства туземцев - человеколюбие.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 33 гостя