SQL中的自定义排序

时间:2009-12-08 18:51:38

标签: sql sql-order-by

我有一个像

这样的SQL查询
SELECT column1,column2 
FROM table1 
WHERE column1 IN('q1','q2','q3') 

结果显示在顺序中:

q1
q2
q3

如果我将查询更改为

SELECT column1,column2 
FROM table1 
WHERE column1 IN('q3','q1','q2')

订单仍然相同。

如何在sql语句中实现这种排序?

帮助!!

谢谢

6 个答案:

答案 0 :(得分:6)

是。如果只有某种方式ORDER SQL结果BY

答案 1 :(得分:2)

您需要一个ORDER BY语句。这是唯一的方法来控制结果集的顺序。

答案 2 :(得分:1)

您的RDBMS无法保证结果集将按q1,q2,q3排序。即使你的in子句是in('q1', 'q2', 'q3')。如果您需要强制执行特定订单,请按以下顺序使用订单:

SELECT column1, column2 
  FROM table1 
 WHERE column1 IN('q1','q2','q3')
 ORDER BY column1

另外,请包含您正在使用的RDBMS。在某些情况下,它可能有助于回答这个问题。

答案 3 :(得分:1)

解决此问题的一种方法是在表中添加一个额外的列,例如'SortOrder',它包含确定应返回行的顺序的整数。例如,您可以将SortOrder设置为1(q3),2(q1)和3(q2)。您可以使用以下SELECT语句按所需顺序返回行:

SELECT column1,column2 
FROM table1 
WHERE column1 IN('q3','q1','q2')
ORDER BY SortOrder

答案 4 :(得分:0)

反转列的顺序

SELECT column2, column1 
FROM table1 WHERE column1 IN('q1','q2','q3') 

对行进行排序,请添加ORDER BY子句:

SELECT column1, column2 
FROM table1 WHERE column1 IN('q1','q2','q3') 
ORDER BY column1 DESC

您可以按任意列排序,也可以将其设置为升序(ASC)或降序(DESC)。

您甚至可以按多列排序:

SELECT column1, column2 
FROM table1 WHERE column1 IN('q1','q2','q3') 
ORDER BY column1 DESC, column2 ASC

这会根据column1按降序排序,并会使用column2打破关系。

答案 5 :(得分:0)

ORDER BY子句会有所帮助;但是q1,q2,q3或者必须能够按字母顺序进行逻辑排序,或者如果最早将它们排在最后。这看起来像这样:

SELECT column1,column2 
FROM table1 
WHERE column1 IN('q1','q2','q3') 
ORDER BY column1 ASC

'或DESC,如果你想反过来 '你也可以在列中提到它的位置而不是它的实际名称:

SELECT column1,column2 
FROM table1 
WHERE column1 IN('q1','q2','q3') 
ORDER BY 1 ASC