Order-By

SQL:自定義排序順序

  • March 28, 2017

假設我有一列帶有顏色名稱 ( colour)。自然,它將是一個字元欄位。

我想按 對錶格進行排序colour,但不是按字母順序,而是按彩虹或晶體管顏色程式碼順序。

使用任意排序順序對列進行排序的最簡單方法是什麼?像這樣的東西:

id  name        colour
1   this        red
4   that        red
2   stuff       orange
5   nonsense    orange
3   whatever    yellow
6   etc         yellow

顏色按彩虹順序排列。

顏色的使用只是一個例子。有許多文本數據的順序不是按字母順序排列的。

我會使用另一個帶有鍵值的表(@McNets 也建議)感覺它不那麼冗長且更具可擴展性。

-----------------------------
|         Colours           |
-----------------------------
|  KeyValue  |    Name      |
-----------------------------
|     1      |  Red         |
|     2      |  Orange      |
|     3      |  Yellow      |
-----------------------------

-----------------------------
|        OtherTable         |
-----------------------------
| id |  Name    |  Colour   |
-----------------------------
| 1  | this     |   red     |
| 4  | that     |   red     |
| 2  | stuff    |   orange  |
| 5  | nonsense |   orange  |
| 3  | whatever |   yellow  |
| 6  | etc      |   yellow  |
-----------------------------

SELECT
   ot.Id,
   ot.Name,
   ot.Colour
FROM OtherTable ot
INNER JOIN Colours c on c.Name = ot.Colour
ORDER BY c.KeyValue

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