SELECT *
FROM (VALUES (998), (999), (1000), (1001), (1002), (1003), (1004)) AS T(ID)
ORDER BY CASE
WHEN T.ID BETWEEN 1000 AND 1004 THEN 1
ELSE 2
END
, ID DESC;
從Sick的回答注意到樣本數據。
這是如何工作的?
- 它會檢查你的ID是否符合您的條件,併爲它分配其他1
- 一切的 值將有2
- 將這個值第一
- 你的ID相匹配的標準排序將永遠是第一位
- 然後我們通過ID的降序進行排序剩菜
Ø本安輸出:
╔══════╗
║ ID ║
╠══════╣
║ 1004 ║
║ 1003 ║
║ 1002 ║
║ 1001 ║
║ 1000 ║
║ 999 ║
║ 998 ║
╚══════╝
我做了額外的例子,它產生於我們的數據庫676.800行:
;WITH TestTable (ID)
AS (
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL))
FROM sys.objects
CROSS JOIN sys.schemas
)
SELECT *
FROM TestTable AS T
ORDER BY CASE
WHEN T.ID BETWEEN 1000 AND 1004 THEN 1
ELSE 2
END
, ID DESC;
這是它的結果:
╔════════╗
║ ID ║
╠════════╣
║ 1004 ║
║ 1003 ║
║ 1002 ║
║ 1001 ║
║ 1000 ║
║ 676800 ║
║ 676799 ║
║ 676798 ║
║ 676797 ║
║ 676796 ║
║ 676795 ║
║ ... ║
║ 1006 ║
║ 1005 ║
║ 999 ║
║ 998 ║
║ ... ║
║ 1 ║
╚════════╝
如果我的表有20K條目會怎麼樣?您給出了一個包含7個條目的特定固定示例。 –
我可以看到沒有區別。如果你的ID符合這個標準:'當1000和1004之間的時間爲T.'時,它們總是在這個查詢中排在第一位。 –
你說得對,我的錯,對不起。謝謝你的信息 –