共用方式為


ORDER BY 子句 (Transact-SQL)

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

[!附註]

在檢視、內嵌函數、衍生資料表或子查詢的定義中使用 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 (90) 相容性模式時,該運算式便無法解析成常數。資料行名稱和別名可以用資料表或檢視表名稱來限定。在 SQL Server 中,限定的資料行名稱和別名會解析為 FROM 子句所列出的資料行。如果 order_by_expression 未限定,這個值在 SELECT 陳述式所列出的所有資料行之間必須是唯一的。

    您可以指定多個排序資料行。ORDER BY 子句中的排序資料行順序用來定義排序結果集的組織。

    ORDER BY 子句可包括未出現在選取清單中的項目。不過,如果指定了 SELECT DISTINCT,或陳述式包含 GROUP BY 子句,或是 SELECT 陳述式包含 UNION 運算子,排序資料行就必須出現在選取清單中。

    另外,當 SELECT 陳述式包括 UNION 運算子時,資料行名稱或資料行別名必須是第一份選取清單中所指定者。

    [!附註]

    ORDER BY 子句不能使用 ntext、text、image 或 xml 資料行。

  • COLLATE {collation_name}
    指定應該根據 collation_name 中所指定的定序來執行 ORDER BY 作業,而不是根據資料表或檢視中所定義的資料行定序來執行。collation_name 可以是 Windows 定序名稱,也可以是 SQL 定序名稱。如需詳細資訊,請參閱<安裝程式中的定序設定>和<使用 SQL Server 定序>。COLLATE 只適用於 char、varchar、nchar 和 nvarchar 等資料類型的資料行。

  • ASC
    指定在指定資料行中的值應該從最低值到最高值,依照遞增順序來儲存。ASC 是預設排序。

  • DESC
    指定在指定資料行中的值應該從最高值到最低值,依照遞減順序來儲存。

備註

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

ORDER BY 子句中的項目數沒有限制。不過,排序作業所需要的中繼工作資料表,資料列大小限制為 8,060 位元組。這會限制 ORDER BY 子句所指定之資料行的總大小。

當搭配 SELECT...INTO 陳述式一起使用,以插入其他來源的資料列時,ORDER BY 子句無法保證資料列會依照指定順序插入。

範例

下列範例示範對結果集進行排序。

依照數值 ProductID 資料行來排序。預設為遞增順序排序。

USE AdventureWorks2008R2;
GO
SELECT ProductID, Name FROM Production.Product
WHERE Name LIKE 'Lock Washer%'
ORDER BY ProductID ;

依照數值 ProductID 資料行以遞減順序排序。

SELECT ProductID, Name FROM Production.Product
WHERE Name LIKE 'Lock Washer%'
ORDER BY ProductID DESC;

依照 Name 資料行來排序。請注意,字元會以字母順序排序,而不是以數值順序排序。也就是說,10 會排序在 2 之前。

SELECT ProductID, Name FROM Production.Product
WHERE Name LIKE 'Lock Washer%'
ORDER BY Name ASC ;

依照兩個資料行來排序。這個查詢會先依照 FirstName 資料行以遞增順序排序,然後再依照 LastName 資料行以遞減順序排序。

SELECT LastName, FirstName FROM Person.Person
WHERE LastName LIKE 'R%'
ORDER BY FirstName ASC, LastName DESC ;