我有一个表:
学号    姓名    日期    类别    项目    金额
001     张三    01-01   1       书费    20
001     张三    01-01   1       杂费    30
001     张三    01-02   1       书费    10
001     张三    01-02   1       杂费    40
002     李四    01-01   2       书费    20
002     李四    01-01   2       杂费    30
002     李四    01-02   2       书费    10
002     李四    01-02   2       杂费    40我要写一个sql语句实现查找同一个学号,同一个日期的费用总和,要学号,姓名,日期,类别,金额,几个字段,如:学号    姓名    日期    类别    金额
001     张三    01-01   1       50再写一个sql语句,实现查找同一个人不同项目的费用合计,如学号为001的:学号    姓名    类别    项目    金额
001     张三    1       书费    30
001     张三    1       杂费    70大大帮帮我吧!

解决方案 »

  1.   

    多看SQL ,group by 就可解决!1|、select 学号,姓名,日期,类别,sum(金额)
    from table
    group by 学号,姓名,日期,类别
    where 学号=001
      

  2.   

    2、select 学号,姓名,项目,sum(金额)
    from table
    group by 学号,姓名,类别,项目
    where 学号=001
      

  3.   

    谢谢了,但是我不太明白group by 后面的字段和前面的字段的关系,能告诉我吗?
      

  4.   

    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 将返回错误信息并取消查询。 访问和更改关系数据  
    使用 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 子句限制结果集中的行;对于分组列中的每个非重复值只有一行。每个结果集行都包含与其分组列中特定值相关的汇总数据。当 SELECT 语句中包含 GROUP BY 关键字时,对可以在选择列表中指定的项有一些限制。在该选择列表中所允许的项目是: 分组列。
    为分组列中的每个值只返回一个值的表达式,例如将列名作为其中一个参数的聚合函数。这些函数称为矢量聚合。 
    例如,TableX 包含:ColumnA ColumnB ColumnC 
    ------- ------- ------- 
    1 abc 5 
    1 def 4 
    1 ghi 9 
    2 jkl 8 
    2 mno 3 如果 ColumnA 是分组列,则结果集中将有两行,其中一行汇总值 1 的信息,而另一行汇总值 2 的信息。如果 ColumnA 是分组列,要引用 ColumnB 或 ColumnC,这两列必须能为 ColumnA 中的每个值返回单个值的聚合函数中的参数。选择列表中包含诸如 MAX (ColumnB)、SUM (ColumnC) 或 AVG (ColumnC) 之类的表达式是合法的:SELECT ColumnA,
           MAX(ColumnB) AS MaxB,
           SUM(ColumnC) AS SumC
    FROM TableX
    GROUP BY ColumnA该选择语句返回两行,为 ColumnA 中的每个唯一值各返回一行:ColumnA     MaxB SumC        
    ----------- ---- ----------- 
    1           ghi  18          
    2           mno  11          (2 row(s) affected)但是,选择列表中只包含 ColumnB 表达式是不合法的:SELECT ColumnA,
           ColumnB,
           SUM(ColumnC) AS SumC
    FROM TableX
    GROUP BY ColumnA由于 GROUP BY 关键字只能返回一行,该行 ColumnA 中的值为 1,因此无法返回与 ColumnA 中的值 1 关联的 ColumnB 的三个值(abc、def 和 ghi)。不能对 ntext、text、image 或 bit 列使用 GROUP BY 或 HAVING 子句,除非它们所在的函数返回的值具有其它数据类型。这样的函数包括 SUBSTRING 和 CAST。
    请参见CAST 和 CONVERT SUBSTRINGSELECT&copy;1988-2000 Microsoft Corporation。保留所有权利。
      

  5.   

    group是分组,就是把有相同字段值的记录进行汇总,成一组,这里就对学号为001的学号,姓名,类别,项目字段进行汇总,然后把每一组里的金额进行相加以得到金额总和!