共用方式為


使用 ORDER BY 排序資料列

ORDER BY 子句會依照一個或多個資料行 (最多 8,060 個位元組) 排序查詢結果。如需 ORDER BY 子句大小上限的詳細資訊,請參閱<ORDER BY 子句 (Transact-SQL)>。

從 SQL Server 2005 開始,SQL Server 允許從 FROM 子句中的資料表指定排序資料行,而不是在 SELECT 清單中指定。ORDER BY 子句中參考的資料行名稱必須對應到 SELECT 清單中的資料行,或語意明確之 FROM 子句中資料表的資料行。如果資料行名稱在 SELECT 清單中使用的是別名,則 ORDER BY 子句中只能使用別名。同樣地,如果資料表名稱在 FROM 子句中使用的是別名,則只能使用別名來限定其在 ORDER BY 子句中的資料行。

排序可以是遞增 (ASC) 或遞減 (DESC)。如果都未指定,將採用 ASC。

下列查詢會傳回按 ProductID 遞增排序的結果:

USE AdventureWorks2008R2;
GO
SELECT ProductID, ProductLine, ProductModelID
FROM Production.Product
ORDER BY ProductID;

若有多個資料行出現在 ORDER BY 子句中,將會形成巢狀的排序。下列陳述式會排序 Production.Product 資料表中的資料列,其會先依照遞減順序來排序產品子類別目錄,然後在每個產品子類別目錄內依照遞增順序來排序 ListPrice。

USE AdventureWorks2008R2;
GO
SELECT ProductID, ProductSubcategoryID, ListPrice
FROM Production.Product
ORDER BY ProductSubcategoryID DESC, ListPrice;

ORDER BY 子句的確切結果會根據正在排序之資料行的定序來決定。如需詳細資訊,請參閱<使用定序>。對於 char、varchar、nchar 及 nvarchar 資料行,您可以指定要依據定序執行 ORDER BY 作業,但是這個定序必須不同於資料表或檢視中定義之資料行的定序。您可以指定 Windows 定序名稱或 SQL 定序名稱。例如,在 AdventureWorks2008R2 資料庫中,Person.Person 資料表的 LastName 資料行是利用 Latin1_General 定序來定義,但在下面的指令碼中,是使用 Traditional_Spanish 定序以遞增順序傳回資料行。

USE AdventureWorks2008R2;
GO
SELECT LastName FROM Person.Person
ORDER BY LastName
COLLATE Traditional_Spanish_ci_ai ASC;
GO

您無法在具有 text、ntext、image 或 xml 資料類型的資料行上使用 ORDER BY。

ORDER BY 只保證會針對查詢的最外層 SELECT 陳述式排序結果。例如,請考慮下列檢視定義:

CREATE VIEW TopView AS 
SELECT TOP 50 PERCENT * FROM Person.Person       
ORDER BY LastName;       

接著,查詢檢視:

SELECT * FROM TopView;       

雖然檢視定義包含了 ORDER BY 子句,但是只使用該 ORDER BY 子句,來判定 TOP 子句所傳回的資料列。當查詢檢視本身時,SQL Server 不保證結果會經過排序,除非您明確地如下面顯示的查詢指定:

SELECT * FROM TopView       
ORDER BY LastName;       

請參閱

概念