2011-12-12 52 views
2

我已經看到了這個問題: Select query but show the result from record number 3選擇查詢,但表示從記錄號結果3

|id| foo | bar | 
------------------------- 
|1 | aaa | 123 | 
|2 | bbb | 234 | 
|3 | ccc | 345 | 
|4 | ddd | 456 | 

基於上面的鏈接我使用查詢

SELECT * 
FROM Table 
ORDER BY (id = 3) DESC 

結果是

|id| foo | bar | 
------------------------- 
|3 | ccc | 345 | 
|1 | aaa | 123 | 
|2 | bbb | 234 | 
|4 | ddd | 456 | 

所以我的問題是,有什麼辦法可以顯示結果從記錄號3開始,然後是4,然後是1,最後是記錄號2? 所以結果可以證明如下:

|id| foo | bar | 
------------------------- 
|3 | ccc | 345 | 
|4 | ddd | 456 | 
|1 | aaa | 123 | 
|2 | bbb | 234 | 

我上面的例子只是一個模型,我的目標就是如何從我選擇則最大循環記錄到第一記錄的記錄結果進行排序。如果我選擇第3條記錄,那麼結果是

3,4,5,...,max,1,2 

是否有可能?

回答

1

,我認爲這會工作:

ORDER BY (id = 3) OR (id = 4) DESC, id ASC 

埃塔:基於您的評論,似乎你真正想要的是1 & 2顯示LAST。這將是這樣的:

ORDER BY id <= 2, id 
+0

是的,它可以工作,但是如果你只有4條記錄就像例子那樣。如果我有20個記錄呢? –

+0

@sapu - 那麼它會顯示爲3,4,1,2,5,6,7等。這不是你所期望的嗎?如果不是,如果有超過4條記錄,你希望顯示什麼? –

+0

我的問題只是一個模型。我預計,如果記錄超過4,那麼結果顯示爲3,4,5,...,max,1,2 –

1

要強制一個特定的順序一樣,你需要使用CASE

ORDER BY CASE WHEN id = 3 THEN 1 
       WHEN id = 4 THEN 2 
       WHEN id = 1 then 3 
       WHEN id = 2 then 4 
       ELSE 5 END ASC 
+0

Alternative version: 'ORDER BY id = 3 DESC,id = 4 DESC,id = 1 DESC,id = 2 DESC,id ASC' – piotrekkr

0

這可能不是完美的理想,因爲它需要兩個查詢,但它完全確定並且不依賴於使用布爾值來進行排序:

(SELECT * 
FROM Table 
WHERE id >= 3 
ORDER BY id ASC) 
UNION 
(SELECT * 
FROM Table 
WHERE id < 3 
ORDER BY id ASC)