2013-03-25 79 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 ...