折叠行组

您可以创建这样的一个查询结果,其中每个结果行都与来自原始数据的一整组行相对应。 拆叠行时需要记住几件事:

  • 可以除去重复行   有些查询可以创建显示多个相同行的结果集。 例如,可以创建这样的结果集,其内每行都包含含有作者的城市的城市名和州名,但如果一个城市包含几个作者,将会生成几个相同的行。 得到的 SQL 可能像下面这样:

    SELECT city, state
    FROM authors
    

    由上述查询生成的结果集不是很有用。 如果一个城市包含四个作者,结果集将包括四个相同的行。 由于结果集不包括除 city 和 state 以外的任何其他列,因此无法区别这些相同的行。 避免这类重复行的一种方法是包含能使行不同的附加列。 例如,如果包含作者名,则每行将不同(假如任一城市内不存在两个同名的作者)。 得到的 SQL 可能像下面这样:

    SELECT city, state, fname, minit, lname
    FROM authors
    

    当然,上述查询除去了表象,但并未真正解决问题。 也就是说,结果集不含重复行,但已不再是关于城市的结果集。 若要除去原始结果集内的重复行,使每行仍描述一个城市,可以创建只返回唯一行的查询。 得到的 SQL 可能像下面这样:

    SELECT DISTINCT city, state
    FROM authors
    

    有关消除重复行的详细信息,请参见 如何:排除重复行

  • 可以在行组上进行计算   也就是说,可以汇总行组内的信息。 例如,可以创建这样的结果集:每行包含含有作者的城市的城市名和州名,以及该城市包含的作者数。 得到的 SQL 可能像下面这样:

    SELECT city, state, COUNT(*)
    FROM authors
    GROUP BY city, state
    

    有关在行组上进行计算的详细信息,请参见 汇总查询结果对查询结果进行排序和分组

  • 可以使用选择判据包括行组   例如,可以创建这样的结果集:每行包含含有几个作者的城市的城市名和州名,以及该城市包含的作者数。 得到的 SQL 可能像下面这样:

    SELECT city, state, COUNT(*)
    FROM authors
    GROUP BY city, state
    HAVING COUNT(*) > 1
    

    有关对行组应用选择条件的详细信息,请参见 如何:为组指定条件如何:在同一查询中使用 HAVING 和 WHERE 子句

请参见

其他资源

指定搜索条件

设计查询和视图