2013-03-25 110 views
0

使用的值有什麼辦法命令的結果(例如)順序選擇(....)SQL服務器

SELECT id,age, Location 
FROM Student 
WHERE Location in ('NY','DC','MI','TE') 

而不是讓它們爲

id  age  Location 
1  2  DC 
2  2  NY 
4  2  MI 
6  2  TE 

的其結果應該是有序的爲在(「NY」,「DC」,「MI」,「TE」)的順序爲:

id  age  Location 
2  2  NY 
1  2  DC 
4  2  MI 
6  2  TE 

我想,這是可能由具有臨時表和我將('NY','DC','MI','TE')插入此表中。然後使用左連接將按需要排序。

有沒有更好的解決方案。

請指教。

回答

3

在MySQL中,這可以使用FIND_IN_SET來完成,它返回第二個參數中第一個參數出現的索引,後者是一個包含逗號分隔值的字符串。

我認爲同樣的事情應該可以使用CHARINDEX - 這給一個嘗試:

SELECT id, age, location 
FROM student 
WHERE location IN ('NY','DC','MI','TE') 
ORDER BY CHARINDEX (location, 'NY,DC,MI,TE') 
+0

用得好好的,非常感謝。 – user1961514 2013-03-25 16:26:44

-1

任何解決方案將大致使用臨時表的等價物。您可以使用CTE或子查詢,但實質上使用不同的語法來執行相同的操作。

-1

假設你不必從表中選擇城市代碼,請嘗試以下操作:

ORDER BY FIELD(Location,'NY','DC','MI','TE') 
ORDER BY FIND_IN_SET(Location,'NY,DC,MI,TE') 
ORDER BY LOCATE(CONCAT(',',Location,','),',NY,DC,MI,TE,') 
ORDER BY Location IN ('NY','DC','MI','TE') 

IN還可以接受一個子查詢(ORDER BY Location IN SELECT city_code FROM ...