指定结果集的排序顺序。ORDER BY 子句在子查询中无效。您还可以选择使用 OFFSET-FETCH 子句从结果集中仅提取某个时间范围或某一页的结果。
语法
[ORDER BY { order_by_expression [ ASC | DESC ] } [ ,...n][<offset_fetch>] ]
<offset_fetch> ::= {OFFSET { integer_constant | offset_row_count_expression } { ROW | ROWS } [FETCH { FIRST | NEXT } {integer_constant | fetch_row_count_expression } { ROW | ROWS } ONLY ]}
参数
order_by_expression
指定要排序的列。排序列可以按名称或列别名指定,这可由表名或表达式限定。可以指定多个排序列。ORDER BY 子句中排序列的顺序将决定排序后结果集的结构。ORDER BY 子句可以包括选择列表中未出现的项。
备注
在 ORDER BY 子句中,不能使用数据类型为 ntext 和 image 的列。
ASC
指定所指定列中的值应按升序排序,即从最低值往最高值排序。DESC
指定按降序,从最高值到最低值对指定列中的值进行排序。空值被视为最低的可能值。OFFSET { integer_constant | offset_row_count_expression } { ROW | ROWS }
指定在从查询表达式中开始返回行之前,将跳过的行数。OFFSET 子句的参数可以是大于或等于零的整数或表达式。ROW 和 ROWS 可以互换使用。FETCH {FIRST|NEXT} <行计数表达式> {ROW|ROWS} ONLY
指定在处理 OFFSET 子句后,将返回的行数。FETCH 子句的参数可以是大于或等于 1 的整数或表达式。ROW 和 ROWS 可以互换使用。同样,FIRST 和 NEXT 可以互换使用。
注释
对 ORDER BY 子句中的项数没有限制。
如果同 UNION 语句一起使用 ORDER BY 子句,排序列必须为第一个 SELECT 语句中所指定列名或列别名的列。例如,下面第一个 SELECT 语句可以成功执行,而第二个将失败。
因为 col1 属于第一个表 (t1),所以此语句可以成功执行。
Create t1 (col1 int, col2 int);
Create t2 (col3 int, col4 int);
SELECT * from t1 UNION SELECT * from t2 ORDER BY col1;
因为 col3 不属于第一个表 (t1),所以此语句将失败。
SELECT * from t1 UNION SELECT * from t2 ORDER BY col3;
示例
下面的示例将按雇员的名字列出雇员:
SELECT First Name + ' ' + Last Name FROM Employees ORDER BY First Name
下面的示例说明如何将 OFFSET-FETCH 子句与 ORDER BY 一起使用,其中,从排序的结果集中跳过前 10 行并且返回剩余行。
SELECT First Name + ' ' + Last Name FROM Employees ORDER BY First Name OFFSET 10 ROWS;