Какая логика используется для упорядочения отсортированных строк PowerBuilder DataWindow, которые содержат дубликаты в отсортированном столбце?

Как известно, окна данных в PowerBuilder можно настроить таким образом, чтобы строки сортировались по значениям столбцов. Это прекрасно работает, если значения в этом столбце уникальны. Тем не мение; Я работаю над ситуацией, когда эти столбцы не всегда уникальны, и в результате, когда функция Sort() применяется к DataWindow, дубликаты упорядочены по отношению к другим строкам, но сами по себе не упорядочены.

Лучший способ сказать это было бы через диаграмму.

Представьте себе следующее окно данных:

Сортировка применяется один раз
ID DESCR ACTIVE
1 ABC 1
2 BCD 0
3 BCD 1
4 CDE 1

Сортировка применена дважды
ID DESCR ACTIVE
1 ABC 1
3 BCD 1
2 BCD 0
4 CDE 1

Сортировка применена трижды
ID DESCR ACTIVE
1 ABC 1
2 BCD 0
3 BCD 1
4 CDE 1

Если я применю сортировку по возрастанию к столбцу DESCR, две строки BCD поменяются местами. Помните, я применяю сортировку только в столбце DESCR. Похоже, что функция сортировки случайным образом присваивает позицию повторяющимся значениям. В моем примере, если я постоянно применяю функцию сортировки к этому окну данных с сортировкой по возрастанию в DESCR, строки BCD будут меняться местами.

На вопрос, который у меня есть, кто-нибудь знает, почему это работает таким образом? У меня есть идея, как решить эту проблему, применив вторичную сортировку к скрытому столбцу, который нумерует наборы повторяющихся значений. В моем случае ID 1 будет присвоено 1. ID 2 получит 1, а ID 3 получит двойку. Таким образом, значения BCD можно было отсортировать по DESCR, а затем по этому скрытому столбцу.

Тем не мение; это намного больше хлопот, чтобы просто сохранить строки в том же порядке. Просто опросите сообщество разработчиков PowerBuilder здесь, в стеке, чтобы узнать, сталкивались ли они с этим, исправили ли они это или точно знают, что PB просто случайным образом назначает порядок дублирования значений в отсортированной строке.


person nfootit    schedule 09.11.2011    source источник
comment
Мне кажется нормальным поведением для sgbd, что порядок дубликатов не определен. Если вы хотите сохранить порядок дубликатов, почему бы вам не сортировать как по DESC, так и по ID? например: SetSort('DESCR a, ID a')   -  person Seki    schedule 09.11.2011
comment
Согласен с Секи. Если вы хотите, чтобы последовательность одинаковых значений была согласованной, вам необходимо определить этот порядок. Алгоритмы сортировки нередко размещают одинаковые ключи в разном порядке в зависимости от начального состояния данных.   -  person Terry    schedule 09.11.2011
comment
Я так и предполагал. В конце концов, мы собираемся сделать так, чтобы пользователь установил вторичную сортировку данных с использованием уникального идентификатора. Я надеялся, что в алгоритме сортировки есть механизм, который будет поддерживать позиционирование элементов с одинаковой ценностью. Спасибо за отзыв.   -  person nfootit    schedule 09.11.2011
comment
@nfootit: Чтобы было ясно, в случае, если вы задавались вопросом о «sgbd» (я забыл, что этот жаргонный термин французский): я имел в виду «СУБД» :-)   -  person Seki    schedule 09.11.2011
comment
@Seki: Да, мне пришлось погуглить. После того, как я увидел в основном французские результаты и в сочетании с вашим профилем, я смог понять это. :)   -  person nfootit    schedule 10.11.2011
comment
@nfootit: Спасибо за добавление данных и способ визуализации вашего вопроса. Не думаю, что в противном случае вопрос имел бы смысл. Я согласен с консенсусом здесь, что вторичная сортировка несовместима, если она не явная.   -  person Rich Bianco    schedule 12.11.2012


Ответы (1)


Просто добавьте в критерии сортировки столбец ACTIVE (даже если он вам не особо нужен для сортировки - не повредит!), и проблема решена!

person Ursego    schedule 16.11.2011