Sqlite
ID < 1000時按ID排序,否則按名稱排序
我有一個 ID 和名稱表。在Id小於1000的地方,我想按Id排序。否則按名稱排序。例如,如果我有:
Id Name 2 A 1 B 3 C 1111 Z 2222 Y 3333 X
結果應該是(前三行按 Id 排序,後三行按名稱排序):
Id Name 1 B 2 A 3 C 3333 A 1111 B 2222 C
我想出了這個:
SELECT * FROM table1 ORDER BY CASE Id WHEN Id < 1000 THEN Id ELSE Name END ASC ;
這實際上不起作用 - 對於下表:
Id Name 1 M 2 P 3 A1 4 C 5 A2 6 T 1009 A2 1011 A1 1010 A3
我得到以下輸出:
1 M 3 A1 1011 A1 5 A2 1009 A2 1010 A3 4 C 2 P 6 T
這裡發生了什麼事?我追求的正確查詢是什麼?
@ypercubeᵀᴹ 在評論中有正確答案。
要讓這始終正確——包括名稱以數字開頭的情況——您需要有一個兩列 order by 子句,如下所示:
SELECT * FROM table1 ORDER BY CASE WHEN Id < 1000 THEN Id ELSE 1000 END, Name;
觀察所有大於 1000 的 Id 都被分配了相同的值,這樣第二列就會起作用。
在玩了一些之後,這似乎有效:
SELECT * FROM table1 ORDER BY CASE WHEN Id < 1000 THEN Id WHEN Id > 1000 THEN Name END ASC