适用于:SQL Server
可以对查询结果中的行进行排序。 也就是说,可以命名其值确定结果集中行顺序的特定列或列集。
注意
排序的顺序部分由列的排序序列决定。 可以在“排序规则”对话框中更改排序规则序列。
可通过多种方式对查询结果进行排序:
您可以按升序或降序排列行 默认情况下,SQL 使用排序列按升序排列行。 例如,若要按升序价格排列书籍标题,只需按价格列对行进行排序。 生成的 SQL 可能如下所示:
SELECT * FROM titles ORDER BY price
另一方面,如果要首先使用更昂贵的书籍排列标题,可以显式指定最高优先排序。 也就是说,指示结果行应按价格列的降序值进行排列。 生成的 SQL 可能如下所示:
SELECT * FROM titles ORDER BY price DESC
可以按多个列进行排序 例如,可以为每个作者创建一个结果集,先按州排序,再按城市排序。 生成的 SQL 可能如下所示:
SELECT * FROM authors ORDER BY state, city
可以按结果集中未显示的列进行排序 例如,可以先创建具有最昂贵的游戏的结果集,即使价格未显示。 生成的 SQL 可能如下所示:
SELECT title_id, title FROM titles ORDER BY price DESC
可以按派生列进行排序 例如,可以创建一个结果集,其中每一行都包含一个书名 -- 每个副本支付最高版税的书籍首先出现。 生成的 SQL 可能如下所示:
SELECT title, price * royalty / 100 as royalty_per_unit FROM titles ORDER BY royalty_per_unit DESC
(计算每本书每册赚取版税的公式被特别强调。)
若要计算派生列,可以使用 SQL 语法,如前面的示例所示,也可以使用返回标量值的用户定义的函数。 有关用户定义的函数的详细信息,请参阅 SQL Server 文档。
可以 对分组行进行排序;例如;可以创建一个结果集,其中每行描述一个城市,以及该城市中的作者数量 - 包含许多作者的城市首先出现。 生成的 SQL 可能如下所示:
SELECT city, state, COUNT(*) FROM authors GROUP BY city, state ORDER BY COUNT(*) DESC, state
请注意,查询使用
state
作为辅助排序列。 因此,如果两个州具有相同数量的作者,则这些状态将按字母顺序显示。可以使用国际数据进行排序, 即:可以使用排序规则对列进行排序,这些约定不同于该列的默认约定。 例如,您可以编写一个查询来检索 Jaime Patiño 的所有书名。 若要按字母顺序显示标题,请使用西班牙语排序序列作为标题列的依据。 生成的 SQL 可能如下所示:
SELECT title FROM authors INNER JOIN titleauthor ON authors.au_id = titleauthor.au_id INNER JOIN titles ON titleauthor.title_id = titles.title_id WHERE au_fname = 'Jaime' AND au_lname = 'Patiño' ORDER BY title COLLATE SQL_Spanish_Pref_CP1_CI_AS
另请参阅
排序和分组查询结果(Visual Database Tools)
设计查询和视图的入门指南(Visual Database Tools)