回答
...
ORDER BY
CASE
WHEN @sort = 1 THEN sortcolumn
ELSE 1 --constant value with same type of "sortcolumn" eg '19000101' or 'a'
END
您測試@sort
參數的值並相應地執行不同的查詢。
使用IF:
IF (@sort = 0)
SELECT...
ELSE
SELECT...
ORDER BY ....
使用CASE:
SELECT ...
ORDER BY
CASE
WHEN @sort = 1 THEN xxx
ELSE 1
END
這是一個維護噩夢,除非你真的很好地評論它。總有人會改變一個分支,而不是另一個。 –
我沒想到這個工作,我必須承認,但它確實。在這個例子中,如果@sort設置爲true,我們會按城市排序,否則,我們使用其他一些默認排序(它必須與排序列的類型相同)。
DECLARE @sort bit
SET @sort = 0
SELECT [addressId]
,[customerId]
,[addressTypeId]
,[address1]
,[address2]
,[address3]
,[town]
,[county]
,[postcode]
,[countryCode]
FROM
[dbo].[tblAddress]
ORDER BY
CASE
WHEN @sort = 1 THEN town
ELSE 'A'
END ASC
根據評論建議進行編輯。
而不是按您的ELSE子句中的主鍵進行排序,只需對某個固定值進行排序,如0或''。 –
很棒的建議。我已經更新了答案以反映這個想法。 – Fenton
假設您正在使用SQL Server(一個很大的假設) - This post很好地描述了一種方法,以便使用動態sql(您幾乎可以肯定不應該這樣做b/c sql server將無法優化程序。
但是不管採取什麼方法,你爲什麼要這麼做?條件排序所增加的複雜性幾乎肯定不是最優的,編寫一個良好的存儲過程(使用合適的索引)總是返回排序數據。特別需要未排序的數據(並且即使您確實需要未排序的數據,也無法保證SQL無法爲您排序,因爲如果未指定排序,返回的行將處於非確定性順序)?
- 1. 選擇排序程序C
- 2. Bubblesort和選擇排序不排序
- 3. C++選擇排序不排序
- 4. 根據存儲過程的結果對錶格進行排序
- 5. 使用現有的存儲過程進行分頁和排序
- 6. 對C中的鏈表進行排序(選擇排序)
- 7. 使用數組進行選擇排序
- 8. 使用指針進行選擇排序
- 9. 排序存儲過程的結果
- 10. Mysql存儲過程參數排序
- 11. 存儲過程中的排序規則
- 12. JTable排序 - 選擇一行
- 13. Select2 val不反映選擇順序,但對其進行排序
- 14. 爲一個已排序陣列的運行時間由選擇排序算法進行排序Vs的時間爲反轉排序的數組進行排序
- 15. 不良選擇排序Python
- 16. 如何使用ASP Classic或jQuery進行選擇排序?
- 17. 氣泡排序和選擇排序
- 18. 選擇排序與插入排序
- 19. 選擇排序與泡泡排序C++
- 20. 對Redis中存儲的JSON文檔進行排序和篩選
- 21. Python選擇排序
- 22. 選擇排序 - arrayLists
- 23. 選擇排序C++?
- 24. Java選擇排序
- 25. 選擇排序Java
- 26. Java選擇排序
- 27. 選擇排序C#
- 28. 通過子選擇結果進行的MySQL排序
- 29. 如何通過選擇菜單對mysql結果進行排序
- 30. 通過jQuery對選擇下拉列表進行排序?
通常「no sort」=「按主鍵排序」。因此,首先根據@Sort設置某種@Sortkey,然後ORDER BY @Sortkey –
ok ......謝謝大家^ _^ – Cynede
@SF:無ORDER BY =沒有保證的順序。如果它與PK相匹配,那純粹是一致的,不能被依賴。 – gbn