我有一个像
这样的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语句中实现这种排序?
帮助!!
谢谢
答案 0 :(得分:6)
答案 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