Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.10.30;
Скачать: [xml.tar.bz2];

Вниз

Переменное правило сортировки. Возможно ли это?   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.063 c
14-1128580186
Мазут Береговой
2005-10-06 10:29
2005.10.30
Сделал открытие века! Такой вот я непоседа!


2-1128592502
root
2005-10-06 13:55
2005.10.30
Типы полей в Access


1-1128359842
DimaT
2005-10-03 21:17
2005.10.30
ReadComponent / WriteComponent


2-1128883044
redlord
2005-10-09 22:37
2005.10.30
из dataset в listbox


14-1128332022
TUser
2005-10-03 13:33
2005.10.30
Элита нашего общества,





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский