Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL中的自定义排序_Sql_Sql Order By - Fatal编程技术网

SQL中的自定义排序

SQL中的自定义排序,sql,sql-order-by,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语句中实现这种排序 救命 谢谢是的。如果有办法得到SQL结果,那就好了。到颠倒列的顺序: SELE

我有一个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语句中实现这种排序

救命


谢谢

是的。如果有办法得到SQL结果,那就好了。

颠倒列的顺序:

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
打破联系。您需要一个orderby语句。这是控制结果集顺序的唯一方法。

您的RDBMS不能保证结果集将在第一季度、第二季度和第三季度之前排序。即使您的in子句是
in('q1','q2','q3')
。如果需要强制执行特定命令,请通过以下方式使用命令:

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

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

ORDER BY子句会有所帮助;但是,q1、q2、q3或必须能够按字母顺序或日期从早到晚进行逻辑排序。看起来是这样的:

SELECT column1,column2 
FROM table1 
WHERE column1 IN('q1','q2','q3') 
ORDER BY column1 ASC
SELECT column1,column2 
FROM table1 
WHERE column1 IN('q1','q2','q3') 
ORDER BY 1 ASC
'如果您想换成相反的,也可以叫DESC '您还可以根据列的位置而不是实际名称对列进行寻址,如下所示:

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

解决这个问题的一种方法是在表中添加一个额外的列,例如“SortOrder”,它包含决定行返回顺序的整数。例如,您可以为第3季度将SortOrder设置为1,为第1季度将SortOrder设置为2,为第2季度将SortOrder设置为3。可以使用以下SELECT语句按所需顺序返回行:

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

同学们,今天我们要学习SQL。好消息是,这主要是select语句。坏消息是,这主要是select语句……根据您的问题,看起来您希望您的订单是第3、第1、第2季度。这种顺序是任意的,计算机在没有额外信息的情况下无法派生出任何东西,不管SQL是否可以为您提供这些信息。这就是你的意思,还是你想要降序(q3,q2,q1)?你是在寻找实际的字母顺序(第一条语句),还是在寻找伪顺序(第二条语句)?第一个是通过下面几乎所有的答案实现的。重复:它实际上是伪排序。。。我从一些用C实现的其他逻辑中得到了顺序#