Sqlite

ID < 1000時按ID排序,否則按名稱排序

  • September 19, 2020

我有一個 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 &lt; 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 &lt; 1000 THEN Id ELSE 1000 END,
 Name;

觀察所有大於 1000 的 Id 都被分配了相同的值,這樣第二列就會起作用。

在玩了一些之後,這似乎有效:

SELECT * 
FROM table1
ORDER BY 
 CASE 
   WHEN Id &lt; 1000 THEN Id
   WHEN Id &gt; 1000 THEN Name
 END
 ASC

引用自:https://dba.stackexchange.com/questions/275736