我有一个表:
学号 姓名 日期 类别 项目 金额
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大大帮帮我吧!
学号 姓名 日期 类别 项目 金额
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大大帮帮我吧!
解决方案 »
- 求助,把任意文件转变为字符串遇到了问题
- 建立Dll时如何公开模块!
- 请问如何用sendmessage得到listview中所有被选中的checkbox的行?急!在线等!
- between 时间(HH:MM:SS)and 时间(HH:MM:SS)
- 那位大哥知道那里有visual studio6.0 的 msdn英文版下载?
- 请qqyy_sj结分!
- 读取Excel的值并存放到SQL Server的表中?
- 神啊,救救我吧
- Visual Basic 6.0实战讲座 光盘
- !!!!!在SQL语句中如何让一个字段不显示其它显示,(不一个个写因为字段太多,35个)!!!!谢谢了一定给分
- combox 无法 使用退格和移动建?(在线等)
- 怎样暂停一个窗体的运行,等另一个窗体运行结束后继续运行?
from table
group by 学号,姓名,日期,类别
where 学号=001
from table
group by 学号,姓名,类别,项目
where 学号=001
指定用来放置输出行的组,并且如果 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©1988-2000 Microsoft Corporation。保留所有权利。