powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Сортировка по двум столб как по одному.
18 сообщений из 18, страница 1 из 1
Сортировка по двум столб как по одному.
    #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
Сортировка по двум столб как по одному.
    #32284847
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Третье поле можно прямо в запрос добавить типа iif(isnull[bal1]);[bal2];[bal1]) и по нему сортировать
...
Рейтинг: 0 / 0
Сортировка по двум столб как по одному.
    #32284850
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sort By Nz(bal1,bal2)
...
Рейтинг: 0 / 0
Сортировка по двум столб как по одному.
    #32284851
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тьфу блин обед на меня плохо повлиял
Order By канешна
...
Рейтинг: 0 / 0
Сортировка по двум столб как по одному.
    #32285092
Фотография SergeySV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за ответы...
Все заработало через - ORDER BY Nz(bal1,bal2).

2Лох Позорный: на счет Nz, вместо IIf - "Остро, позарубежному" //(Две башни снесло) сам я до того не додумался бы, тоже через IIf полез бы.
...
Рейтинг: 0 / 0
Сортировка по двум столб как по одному.
    #32285168
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не всегда то, что короче лучше :)
Nz, по-моему, будет медленнее работать, чем iif.
В моих тестах на 30-40%.
...
Рейтинг: 0 / 0
Сортировка по двум столб как по одному.
    #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
Сортировка по двум столб как по одному.
    #32285598
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Совершенно неправильно сравнивать скорость функции iif в запросе и в VBA.
Чтобы не быть голословным, привлеку на помощь Гетца:
>>>>>>>>>>>>
В запросах, формах и отчетах функция IIf работает не так, как в VBA, - она является полным аналогом оператора If...Then...Else.
<<<<<<<<<<<<
Еще раз проверил (на другом компе) скорость выполнения запроса из 10000 записей с nz и iif и снова убедился, что iif быстрее.
Извините...
...
Рейтинг: 0 / 0
Сортировка по двум столб как по одному.
    #32285944
Фотография SergeySV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да ладно, не извиняйся... :-)

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

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

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

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


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