Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Сортировка по двум столб как по одному. / 18 сообщений из 18, страница 1 из 1
06.10.2003, 12:34
    #32284831
SergeySV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка по двум столб как по одному.
Тут попросили меня навести небольший глянец, вот хочу попспрашивать совета:

Исходные: таблица, полученная с помощью внешнего объединения имеет два одинаковых столбца (на самом деле больше, но это не суть), типа таких:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Nзап     [bal1]         [bal2]                  
   1                           10101               
   2                           10105 
   3                           10107 
   4          10103           10103 
   5          10104           10104 
   6          10106  
   7          10108 

Пока отображается как вверху. Т.е. сначала идут записи по порядку с пустыми в поле bal1, потом совпавшие/объединенные, а потом соотв. с пустыми в поле bal2

А просят сделать так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Nзап         [bal1]         [bal2]                  
   1 ( 1 )                          10101               
   2 ( 4 )         10103           10103 
   3 ( 5 )         10104           10104 
   4 ( 2 )                          10105 
   5 ( 6 )         10106  
   6 ( 3 )                          10107 
   7 ( 7 )         10108 

Т.е. чтобы сортировка была как бы сразу по двум столбцам. Возможно ли так сделать???

Пока мне в голову приходит, только добавления в таблицу еще одного поля, которое должно хитрым образом заполняться, а по нему потом соответственно и сортироваться( - надо еще подумать как лучше это сделать) Может есть еще другой вариант?
...
Рейтинг: 0 / 0
06.10.2003, 12:42
    #32284847
Serge Gavrilov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка по двум столб как по одному.
Третье поле можно прямо в запрос добавить типа iif(isnull[bal1]);[bal2];[bal1]) и по нему сортировать
...
Рейтинг: 0 / 0
06.10.2003, 12:42
    #32284850
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка по двум столб как по одному.
Sort By Nz(bal1,bal2)
...
Рейтинг: 0 / 0
06.10.2003, 12:43
    #32284851
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка по двум столб как по одному.
тьфу блин обед на меня плохо повлиял
Order By канешна
...
Рейтинг: 0 / 0
06.10.2003, 14:23
    #32285092
SergeySV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка по двум столб как по одному.
Спасибо за ответы...
Все заработало через - ORDER BY Nz(bal1,bal2).

2Лох Позорный: на счет Nz, вместо IIf - "Остро, позарубежному" //(Две башни снесло) сам я до того не додумался бы, тоже через IIf полез бы.
...
Рейтинг: 0 / 0
06.10.2003, 15:06
    #32285168
Serge Gavrilov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка по двум столб как по одному.
Не всегда то, что короче лучше :)
Nz, по-моему, будет медленнее работать, чем iif.
В моих тестах на 30-40%.
...
Рейтинг: 0 / 0
06.10.2003, 15:24
    #32285207
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка по двум столб как по одному.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Public Function test()
    Dim varTmp1 As Variant, varTmp2 As Variant
    Dim lngTmp As Long
    varTmp1 = Null
    varTmp2 =  1 
    
    Dim t As Single
    t = Timer
    
    Dim i As Long
    For i =  1  To  1000000 
'        lngTmp = Nz(varTmp1, varTmp2) '
'        lngTmp = Nz(varTmp2, varTmp1) '
'        lngTmp = IIf(IsNull(varTmp1), varTmp2, varTmp1) '
'        lngTmp = IIf(IsNull(varTmp2), varTmp1, varTmp2) '
    Next i
    
    Debug.Print Timer - t
End Function


В зависимости от того, какую из четырех строчек раскоментарить - получаем
0.5195313
0.421875
0.671875
0.6601563

Аксес 97-й
...
Рейтинг: 0 / 0
06.10.2003, 19:49
    #32285598
Serge Gavrilov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка по двум столб как по одному.
Совершенно неправильно сравнивать скорость функции iif в запросе и в VBA.
Чтобы не быть голословным, привлеку на помощь Гетца:
>>>>>>>>>>>>
В запросах, формах и отчетах функция IIf работает не так, как в VBA, - она является полным аналогом оператора If...Then...Else.
<<<<<<<<<<<<
Еще раз проверил (на другом компе) скорость выполнения запроса из 10000 записей с nz и iif и снова убедился, что iif быстрее.
Извините...
...
Рейтинг: 0 / 0
07.10.2003, 11:12
    #32285944
SergeySV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка по двум столб как по одному.
Да ладно, не извиняйся... :-)

Действительно, проверил на тестовых таблицах из 300 записей:
1. Nz(bal1, bal2) - 122
2. IIf(bal1>0, bal1, bal2) - 94
через IIf получается быстрее
...
Рейтинг: 0 / 0
07.10.2003, 12:25
    #32286081
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка по двум столб как по одному.
> 2. IIf(bal1>0, bal1, bal2) - 94
> через IIf получается быстрее

А если IIf(IsNull(bal2), bal1, bal2)? Так сравнивать вроде корректнее.
...
Рейтинг: 0 / 0
07.10.2003, 12:34
    #32286104
Serge Gavrilov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка по двум столб как по одному.
>А если IIf(IsNull(bal2), bal1, bal2)? Так сравнивать вроде корректнее.
Я это и использовал ...
...
Рейтинг: 0 / 0
07.10.2003, 12:38
    #32286117
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка по двум столб как по одному.
А что такое IIf(bal1>0, bal1, bal2)? Это опечатка?
...
Рейтинг: 0 / 0
07.10.2003, 13:00
    #32286173
SergeySV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка по двум столб как по одному.
с IzNull у меня почему то не пошел, и я запустил так...

ща еще покавыряюсь, запрос просто большой, лопатишь его лопатишь, мож где что и упустил
...
Рейтинг: 0 / 0
07.10.2003, 13:02
    #32286177
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка по двум столб как по одному.
Просто я предполагаю, что IIf и Nz работают с одинаковой скоростью, если IIf работает с IsNull. А разница - между IsNull и >.
...
Рейтинг: 0 / 0
07.10.2003, 13:17
    #32286188
Serge Gavrilov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка по двум столб как по одному.
То Владимир Саныч:
Проверьте сами..., мне интересно, какой у вас будет результат
...
Рейтинг: 0 / 0
07.10.2003, 13:19
    #32286193
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка по двум столб как по одному.
1. Я не Вы, я ты. :^)

2. OK, проверю на досуге.
...
Рейтинг: 0 / 0
07.10.2003, 13:54
    #32286253
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка по двум столб как по одному.
Итак, вот результаты. В секундах на 1000-кратное открывание рекордсета.

order by true -> 4.4
order by nz(n1,n2) -> 14.2
order by iif(isnull(n1),n2,n1) -> 8.7
order by iif(n1>0,n1,n2) -> 6.4

nz действительно медленнее всех. Однако последний вариант некорректен, т.к. он не работает при отрицательных значениях полей.
...
Рейтинг: 0 / 0
07.10.2003, 14:17
    #32286295
SergeySV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка по двум столб как по одному.
Хмм, получается если в запросах надо отлавливать поля с Null (числовые например), то быстрее использовать комбинацию IIf с IzNull
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Сортировка по двум столб как по одному. / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]