ORDER BY 子句 (Transact-SQL)

更新: 2006 年 4 月 14 日

指定 SELECT 陳述式傳回的資料行所用的排序順序。除非在檢視、內嵌函數、衍生資料表和子查詢中,也指定了 TOP,否則 ORDER BY 子句無效。

ms188385.note(zh-tw,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-tw,SQL.90).gif附註:
    ORDER BY 子句不能使用 ntexttextimagexml 資料行。
  • COLLATE {collation_name}
    指定應該根據 collation_name 中所指定的定序來執行 ORDER BY 作業,而不是根據資料表或檢視中所定義的資料行定序來執行。collation_name 可以是 Windows 定序名稱,也可以是 SQL 定序名稱。如需詳細資訊,請參閱<安裝程式中的定序設定>和<使用 SQL 定序>。COLLATE 只適用於 charvarcharncharnvarchar 等資料類型的資料行。
  • ASC
    指定在指定資料行中的值應該從最低值到最高值,依照遞增順序來儲存。
  • DESC
    指定在指定資料行中的值應該從最高值到最低值,依照遞減順序來儲存。

備註

Null 值會當作最低的可能值來處理。

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 用途的說明。