2009-10-26 37 views
3

我的SQL語句有一個複雜的排序問題。我有一張表格,內容如下。在SQL中需要複雜排序幫助

No Time Value 
-- ---- ----- 
1 0900 '' 
2 1030 '' 
3 1020 '' 
4 1010 '' 
5 1100 '' 
1 1015 'P' 
2 1045 'P' 

我想通過執行以下步驟對此表進行排序。

  1. 從表中選擇的行,其中的值是「」(空字符串),並通過第排序它

  2. 從同一個表,其中值是選擇行「P」,然後它排序由時間。

  3. 從2)中選擇每一行並按時間插入1)。

結果應該是這樣的。

No Time Value 
-- ---- ----- 
1 0900 '' 
1 1015 'P' 
2 1030 '' 
3 1020 '' 
4 1010 '' 
2 1045 'P' 
5 1100 '' 

如何在SQL中執行此操作?

回答

0

不幸的是,我不認爲你可以用標準的SQL查詢來做到這一點,原因是你的算法不是面向集合的。您的樣本數據集可以說明這一點 - 您將在0900和1030記錄之間出現第一個「P」記錄,但根據您的標準,將它放在1010和1045記錄之間是恰當的。如果把它放在你展示的位置是正確的,那麼你需要修改你的條件,例如「將#2中的前兩行之間的每一行放置在時間上」,其中「第一個」被定義按照#1的分類標準。

結果是,這種類型的設置可能會迫使您進入基於光標的解決方案。如果您可以識別需要排序的複合值,您可能可以避免這種情況,但根據以上所述,我不會看到可能的結果。

2

編輯:感謝您的意見。

關於重讀,我不認爲你的問題的第3部分是有道理的。步驟1)的結果不是按時間排序,而是不能按時間插入。

例如,在您的示例結果中,第二行的時間爲1015,即介於0900和1030之間。但它也可能在1020和1010行之間?

+0

根據他的結果,不會按照錯誤的順序排列第三,第四和第五個(它們按數字排序,因爲值是'')。 – dove 2009-10-26 09:03:58

+0

這會在第2行之前放置第3行 – 2009-10-26 09:05:17

0

看來你可以表達你的需求在一個簡單的需要。
你總是按時間排序,也可能按價值然後按no。

sort by time, value, no 

這將按時間排序。對於兩個相同時間,將應用排序值等。


您可以對您構建的唯一編號進行排序以合併您的標準。但那會更復雜。