对行排序

可以对查询结果内的行进行排序。 也就是说,可以命名某特定列或一组列,这(些)列的值决定结果集内行的顺序。

备注

排序顺序在一定程度上由列的排序规则序列来决定。可以在 “排序规则”对话框 中更改排序规则序列。

下面是在将查询结果排序时可以采用的几种方法:

  • 可以按升序或降序排列行   默认情况下,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
    

有关更多信息,请参见 如何:使用国际数据的查询和视图设计器。 有关结果排序的更多信息,请参见 对查询结果进行排序和分组

请参见

其他资源

对查询结果进行排序和分组

设计查询和视图