ORDER BY 子句 (Transact-SQL)

更新日期: 2006 年 4 月 14 日

指定在 SELECT 语句返回的列中所使用的排序顺序。除非同时指定了 TOP,否则 ORDER BY 子句在视图、内联函数、派生表和子查询中无效。

ms188385.note(zh-cn,SQL.90).gif注意:
在视图、内联函数、派生表或子查询的定义中使用 ORDER BY 时,子句只用于确定 TOP 子句返回的行。ORDER BY 不保证在查询这些构造时得到有序结果,除非在查询本身中也指定了 ORDER BY。

主题链接图标Transact-SQL 语法约定

语法

[ ORDER BY 
    {
    order_by_expression 
  [ COLLATE collation_name ] 
  [ ASC | DESC ] 
    } [ ,...n ] 
] 

参数

  • order_by_expression
    指定要排序的列。可以将排序列指定为一个名称或列别名,也可以指定一个表示该名称或别名在选择列表中所处位置的非负整数。order_by_expression 出现在排名函数中时,不能指定整数。排序列可以包含表达式,但是当数据库处于 SQL Server 2005 (90) 兼容模式时,所包含的表达式无法解析为常量。列名和别名可由表名或视图名加以限定。在 SQL Server 2005 中,限定的列名和别名将解析到 FROM 子句中列出的列。如果 order_by_expression 未限定,则该值在 SELECT 语句列出的所有列中必须是唯一的。

    可指定多个排序列。ORDER BY 子句中的排序列序列定义了排序结果集的结构。

    ORDER BY 子句可包含未显示在选择列表中的项。但是,如果已指定了 SELECT DISTINCT 或该语句包含 GROUP BY 子句,或者 SELECT 语句包含 UNION 运算符,则排序列必须显示在选择列表中。

    此外,当 SELECT 语句包含 UNION 运算符时,列名或列的别名必须是在第一选择列表内指定的列名或列的别名。

    ms188385.note(zh-cn,SQL.90).gif注意:
    ntexttextimagexml 列不能用于 ORDER BY 子句。
  • COLLATE {collation_name}
    指定根据 collation_name 中指定的排序规则,而不是表或视图中所定义的列的排序规则,应执行的 ORDER BY 操作。collation_name 可以是 Windows 排序规则名称或 SQL 排序规则名称。有关详细信息,请参阅安装程序中的排序规则设置使用 SQL 排序规则。COLLATE 仅适用于 charvarcharncharnvarchar 数据类型的列。
  • ASC
    指定按升序,从最低值到最高值对指定列中的值进行排序。
  • DESC
    指定按降序,从最高值到最低值对指定列中的值进行排序。

备注

空值被视为最低的可能值。

对 ORDER BY 子句中的项目数没有限制。但是,排序操作所需的中间工作表的行大小限制为 8,060 个字节。这限制了在 ORDER BY 子句中指定的列的总大小。

在与 SELECT...INTO 语句一起使用以从另一来源插入行时,ORDER BY 子句不能保证按指定的顺序插入这些行。

请参阅

参考

表达式(Transact-SQL)
SELECT (Transact-SQL)
FROM (Transact-SQL)

其他资源

用 ORDER BY 对行进行排序

帮助和信息

获取 SQL Server 2005 帮助

更改历史记录

发布日期 历史记录

2006 年 4 月 14 日

新增内容:
  • 添加了对内联函数、派生表或子查询定义中的 ORDER BY 用途的澄清。

2005 年 12 月 5 日

新增内容:
  • 添加了视图定义中 ORDER BY 用途的说明。