2011-11-09 36 views
2

衆所周知,PowerBuilder中的數據窗口可以根據列值對行進行排序。如果該列中的值是唯一的,這可以正常工作。然而;我正在處理那些列並不總是唯一的情況,結果是,當Sort()函數應用於DataWindow時,重複項相對於其他行進行排序,但本身並未排序。使用什麼邏輯對排序列中包含重複項的PowerBuilder DataWindow的排序行進行排序?

一個更好的方式來說這將通過一個圖。

想象以下數據窗口:施加一次
ID DESCR ACTIVE
1 ABC 1
2 BCD 0
施加兩次3 BCD 1
4 CDE 1

排序

排序
ID DESCR ACTIVE
1 ABC 1
3 B CD 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將得到2。這樣,BCD值可以在DESCR上排序,然後在這個隱藏的列上排序。

但是;如果將行按照相同的順序排列,那就更加麻煩了。只需在Stack上查詢PowerBuilder開發人員社區,看看他們是否遇到過這個問題,如果他們已經解決了這個問題,或者確定PB確實隨機分配了一個命令來重複排序行中的值。

+2

對於我來說,對於sgbd來說,這似乎是正常行爲,重複的順序是未定義的。如果你想保留重複的順序,爲什麼不分類DESC和ID?例如:'SetSort('DESCR a,ID a')' – Seki

+0

同意Seki。如果你希望等值序列是一致的,你需要定義這個順序。排序算法根據數據的初始狀態以不同的順序放置相同的密鑰並不罕見。 – Terry

+0

這就是我認爲會是這樣的情況。最後,我們將讓用戶使用唯一標識符對數據進行二次排序。我希望在排序算法中有一個機制可以保持等價物品的位置。感謝您的意見。 – nfootit

回答

1

只需將列ACTIVE添加到排序條件(即使您不需要對它進行排序 - 它不會造成損害!),問題就解決了!

相關問題