Текущий архив: 2005.10.30;
Скачать: CL | DM;
ВнизПеременное правило сортировки. Возможно ли это? Найти похожие ветки
← →
alex-ran (2005-09-15 16:43) [0]Уважаемые мастера. Возникла необходимость сортировать Набор Данных с переменным условием сортировки, допустим если первое поле нечетное (либо какое другое условие) - то второе поле по возрастанию, и первое четное - второе по убыванию и т. д., Например:
Есть: Надо получить:
№ Длина № Длина
1 500 1 500
1 1600 1 1600
2 700 2 1400
2 1400 2 700
3 600 3 200
3 200 3 600
Можно ли такое сделать средствами SQL?
Пока что приходится делать руками.
С уважением, Александр.
← →
ANB © (2005-09-15 17:09) [1]Можно. Выделить калькулируемое поле в запросе, с помощью case его правильно заполнить и сортировать по нему.
Проблемы (имхо) :
1. Не все движки съедят эту конструкцию (Оракл съест точно)
2. Будет тормозить на больших выборках, так как индекс здесь не прикрутишь.
← →
alex-ran (2005-09-15 17:28) [2]Блин, извиняюсь, забыл уточнить, а в Paradox ?
← →
Reindeer Moss Eater © (2005-09-15 17:29) [3]для Оракла:
...
order by №,decode(bitand(№,1),1,длина,0,1 - длина)
← →
Reindeer Moss Eater © (2005-09-15 17:30) [4]Для парадокса изучай LocalSQL Guide
← →
Johnmen © (2005-09-15 17:35) [5]Не поможет...
← →
alex-ran (2005-09-15 17:50) [6]Вообще-то я и склонялся к мысли как и Johnmen ©
но думал, а вдруг?
Ну а раз нет, то спасибо всем и вопрос закрыт.
← →
Reindeer Moss Eater © (2005-09-15 17:56) [7]Кажется это можно и в LocalSQL.
:)
← →
Reindeer Moss Eater © (2005-09-15 18:00) [8]Нет, все таки нельзя.
В смысле я написал выражение, которое выстроит надор данных по этому правилу, но capability no supported
← →
Reindeer Moss Eater © (2005-09-15 18:02) [9]Нет все таки можно.
Напишу когда приду домой.
← →
alex-ran (2005-09-15 18:11) [10]Если получится, просьба поделиться ноу-хау.
Будем-с ждать. :)
← →
Reindeer Moss Eater © (2005-09-15 19:32) [11]Если поле num целочисленное, то :
select num,((num - 2 * (num / 2)) - 0.5) * len, len from test
order by 1,2
Если дробное, то чуть сложнее.
← →
Johnmen © (2005-09-15 20:23) [12]>Reindeer Moss Eater © (15.09.05 19:32) [11]
Поправочка (для Paradox7)
SELECT F1,
(CAST(0.5-(CAST(F1/2 AS INTEGER)-F1/2) AS INTEGER)-1)*F2,
F2
FROM Table
ORDER BY 1,2
← →
Reindeer Moss Eater © (2005-09-15 20:28) [13]Ну если поле целочисленное, то деление на два и так будет целочисленным.
И каст к интегеру не нужен.
← →
Johnmen © (2005-09-15 21:25) [14]>Ну если поле целочисленное, то деление на два и так будет целочисленным
Это как это ???
>И каст к интегеру не нужен.
По-моему ((num - 2 * (num / 2)) - 0.5) всегда = -0.5
Или нет ?
← →
Reindeer Moss Eater © (2005-09-15 23:00) [15]>Ну если поле целочисленное, то деление на два и так будет целочисленным
Это как это ???
Да так. Результат <целочисленное поле> / 2 будет целочисленным.
← →
Fedia © (2005-09-15 23:12) [16]Reindeer Moss Eater © (15.09.05 23:00) [15]
>Да так. Результат <целочисленное поле> / 2 будет целочисленным.
Ты не путаешь понятие "целочисленное" и "четное" ?
← →
Reindeer Moss Eater © (2005-09-15 23:15) [17]create table test(num integer)
insert into test values(1)
insert into test values(2)
insert into test values(3)
insert into test values(4)
insert into test values(5)
select num, num - (2 * (num / 2)) from test
Получаем:
1,1
2,0
3,1
4,0
5,1
Проверено электроникой.
← →
Fedia © (2005-09-15 23:41) [18]Предположил, что твой результат, это глюк, возникающий про работе с Paradox. Проверил. Получается:
1,0
2,0
3,0
4,0
5,0
как и должно быть.
← →
Reindeer Moss Eater © (2005-09-15 23:48) [19]Федя, у тебя тип поля какой?
← →
Fedia © (2005-09-16 00:10) [20]Твоя правда. Просто странно это...
У меня было поле Number.
← →
Johnmen © (2005-09-16 09:17) [21]>Reindeer Moss Eater © (15.09.05 23:15) [17]
>Получаем:
>1,1
>2,0
>3,1
>4,0
>5,1
>Проверено электроникой.
Какой именно электроникой ? Подробно.
← →
Reindeer Moss Eater © (2005-09-16 09:30) [22]Продукт:
Delphi7
Приложение:
SQL explorer
База данных
DBDEMOS
Таблица:
employee.db
Запрос:
select empno - (2 * (empno / 2)) from employee
Выборка:
0
0
1
0
1
1
...
← →
Johnmen © (2005-09-16 09:40) [23]Всё понятно. Тип целочисленный.
И всё приводится к нему, дробная отбрасывается...
Страницы: 1 вся ветка
Текущий архив: 2005.10.30;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.047 c