对行排序
可以对查询结果内的行进行排序。 也就是说,可以命名某特定列或一组列,这(些)列的值决定结果集内行的顺序。
提示
排序顺序在一定程度上由列的排序规则序列来决定。 可以在“排序规则”对话框中更改排序规则序列。
下面是在将查询结果排序时可以采用的几种方法:
可以按升序或降序排列行 默认情况下,SQL 使用排序依据列按升序排列行。 例如,若要按升序的价格排列书名,只需按 price 列对行排序即可。 得到的 SQL 可能像下面这样:
SELECT * FROM titles ORDER BY price
另一方面,若要排列书名,使较贵的书排在前面,可以显式地指定最贵的排在第一位的顺序。 也就是说,指出应按 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 写的所有书。 若要按字母顺序显示书名,请对 title 列使用 Spanish 排序序列。 得到的 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
有关更多信息,请参见 如何:使用国际数据的查询和视图设计器。 有关结果排序的更多信息,请参见 对查询结果进行排序和分组。