ORDER BY の使用による行の並べ替え

ORDER BY 句は、1 つまたは複数 (8,060 バイト以内) の列に基づいて、クエリの結果を並べ替えます。ORDER BY 句の最大サイズの詳細については、「ORDER BY 句 (Transact-SQL)」を参照してください。

SQL Server 2005 以降の SQL Server では、SELECT リストで指定されていない FROM 句で、テーブルの列を並べ替えることを指定できます。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

ORDER BY は、データ型が text、ntext、image、または xml の列に対しては使用できません。

ORDER BY では、クエリの最も外側の SELECT ステートメントについてのみ並べ替えた結果が保証されます。たとえば、次のビュー定義があるとします。

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

次に、このビューをクエリします。

SELECT * FROM TopView;       

ビュー定義には ORDER BY 句が 1 つ含まれていますが、その ORDER BY 句は TOP 句によって返される行を決定するためにだけに使用されます。SQL Server では、ビュー自体にクエリを実行する場合、次のクエリのように明示的に指定しない限り、結果が並べ替えられるかどうかが保証されません。

SELECT * FROM TopView       
ORDER BY LastName;       

関連項目

概念