使用 GROUP BY 分组多行
GROUP BY 子句用来为结果集中的每一行产生聚合值。如果聚合函数没有使用 GROUP BY 子句,则只为 SELECT 语句报告一个聚合值。以下示例返回分类 2 中每种产品已销售的单位数量:USE Northwind
SELECT OrdD.ProductID AS ProdID,
       SUM(OrdD.Quantity) AS AmountSold
FROM [Order Details] AS OrdD JOIN Products as Prd
     ON OrdD.ProductID = Prd.ProductID
     AND Prd.CategoryID = 2
GROUP BY OrdD.ProductID下面是结果集:ProdID      AmountSold  
----------- ----------- 
3           328         
4           453         
5           298         
6           301         
8           372         
15          122         
44          601         
61          603         
63          445         
65          745         
66          239         
77          791         (12 row(s) affected)GROUP BY 关键字后面跟着列的列表,称为分组列。GROUP BY 子句限制结果集中的行;对于分组列中的每个非重复值只有一行。每个结果集行都包含与其分组列中特定值相关的汇总数据。

解决方案 »

  1.   

    GROUP BY 子句
    指定用来放置输出行的组,并且如果 SELECT 子句 <select list> 中包含聚合函数,则计算每组的汇总值。指定 GROUP BY 时,选择列表中任一非聚合表达式内的所有列都应包含在 GROUP BY 列表中,或者 GROUP BY 表达式必须与选择列表表达式完全匹配。说明  如果未指定 ORDER BY 子句,则使用 GROUP BY 子句返回的组没有任何特定的顺序。建议始终使用 ORDER BY 子句指定特定的数据顺序。
    语法
    [ GROUP BY [ ALL ] group_by_expression [ ,...n ] 
            [ WITH { CUBE | ROLLUP } ] 
    ] 参数
    ALL包含所有组和结果集,甚至包含那些任何行都不满足 WHERE 子句指定的搜索条件的组和结果集。如果指定了 ALL,将对组中不满足搜索条件的汇总列返回空值。不能用 CUBE 或 ROLLUP 运算符指定 ALL。 如果在访问远程表的查询中还有 WHERE 子句,则该查询不支持 GROUP BY ALL。group_by_expression是进行分组所依据的表达式。group_by_expression 也称为分组列。group_by expression 可以是列或引用列的非聚合表达式。在选择列表内定义的列的别名不能用于指定分组列。说明  text、ntext 和 image 类型的列不能用于 group_by_expression。
    对于不包含 CUBE 或 ROLLUP 的 GROUP BY 子句,group_by_expression 的项数受查询所涉及的 GROUP BY 列的大小、聚合列和聚合值的限制。该限制从 8,060 字节的限制开始,对保存中间查询结果所需的中间级工作表有 8,060 字节的限制。如果指定了 CUBE 或 ROLLUP,则最多只能有 10 个分组表达式。CUBE 指定在结果集内不仅包含由 GROUP BY 提供的行,还包含汇总行。在结果集内返回每个可能的组和子组组合的 GROUP BY 汇总行。GROUP BY 汇总行在结果中显示为 NULL,但可用来表示所有值。使用 GROUPING 函数确定结果集内的空值是否是 GROUP BY 汇总值。结果集内的汇总行数取决于 GROUP BY 子句内包含的列数。GROUP BY 子句中的每个操作数(列)绑定在分组 NULL 下,并且分组适用于所有其它操作数(列)。由于 CUBE 返回每个可能的组和子组组合,因此不论指定分组列时所使用的是什么顺序,行数都相同。ROLLUP指定在结果集内不仅包含由 GROUP BY 提供的行,还包含汇总行。按层次结构顺序,从组内的最低级别到最高级别汇总组。组的层次结构取决于指定分组列时所使用的顺序。更改分组列的顺序会影响在结果集内生成的行数。重要  使用 CUBE 或 ROLLUP 时,不支持区分聚合,如 AVG(DISTINCT column_name)、COUNT(DISTINCT column_name) 和 SUM (DISTINCT column_name)。如果使用这类聚合,SQL Server 将返回错误信息并取消查询。
    HAVING 子句
    指定组或聚合的搜索条件。HAVING 通常与 GROUP BY 子句一起使用。如果不使用 GROUP BY 子句,HAVING 的行为与 WHERE 子句一样。语法
    [ HAVING < search_condition > ] 参数
    < search_condition >指定组或聚合应满足的搜索条件。当 HAVING 与 GROUP BY ALL 一起使用时,HAVING 子句替代 ALL。有关更多信息,请参见搜索条件。text、image 和 ntext 数据类型不能用于 HAVING 子句。说明  在 SELECT 语句中使用 HAVING 子句不影响 CUBE 运算符分组结果集和返回汇总聚合行的方式。
      

  2.   

    Group By f1,f2,f3
    按 f1,f2,f3 进行分组,三个字段中只要有一个不一样,就是一个记录
      

  3.   

    使用 GROUP BY  一般是为了使用聚合函数
     GROUP BY a,b,c
    说明只要 a,b,c 一样的就可以归为一组,聚合函数是对归为一组的数据进行操作的