生成按月汇总表的SQL语句

标签 sql vb.net ms-access

我对高级SQL很陌生。 假设我有下表(在 Access 中 - 在 VB.NET 中使用 Jet 4.0 OLEDBAdapter)。

表 - 项目

ID     Date      Account  Amount
-----  ------    -------  ------
1      1/1/2013  Cash     10.00
2      2/1/2013  Cash     20.00
3      1/2/2013  Cash     30.00
4      2/2/2013  Cash     40.00
5      1/1/2013  Card     50.00
6      2/1/2013  Card     60.00
7      1/2/2013  Card     70.00
8      2/2/2013  Card     80.00

我想生成以下内容 - 每个帐户每月的总计

表格 - 总计

Account  Jan       Feb
-----    -----     ------
Cash     30.00     70.00
Card     110.00    150.00

这是否可能使用一个 SQL 语句。我可以分两次完成,但速度很慢。

编辑 - 我得到的最接近的是这个 - 但它不会生成列

SELECT    accFrom, Sum(amount) 
FROM      Items
WHERE     Year(idate) = '2012' 
GROUP BY  Month(idate), accFrom

最佳答案

使用您的示例数据,这是我使用 Access 2010 从下面的查询中获得的输出。

Account 2013-01 2013-02
------- ------- -------
Card    $120.00 $140.00
Cash     $40.00  $60.00

我的总数与您的预期输出不符。我怀疑您的日期值是 d-m-yyyy 格式,但我的美国语言环境将它们解释为 m-d-yyyy。最好以 yyyy-m-d 格式显示日期以避免混淆。

无论如何,此查询将日期格式化为 yyyy-mm,然后转换为每个年月组合生成列。因此它将适应不断增长的日期范围,而无需您修改查询。而且,随着日期范围的增加,您最终可以添加一个 WHERE 子句以将列限制为一个方便的子集。

TRANSFORM Sum(i.Amount) AS SumOfAmount
SELECT i.Account
FROM Items AS i
GROUP BY i.Account
PIVOT Format(i.Date,'yyyy-mm');

关于生成按月汇总表的SQL语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20894123/

相关文章:

SQL如何在单元格的值大于0时求平均值

vb.net - 在 VB .NET 中生成所有实数组合

mysql - 数据源 datagridview 表适配器

ms-access - 如何向子表单添加新记录

ms-access - 使用 ADODB for Web-DAV 上传文件 "cannot find any objects or data in accordance with the name..."

MySQL - 使用 COUNT 进行更新,可能吗?

sql - 在 Oracle SQL 中,如何从表中选择所有数据,但仅显示 DATE 数据类型列中特定于日期的行?

sql - 查询优化以减少多个连接语句

c# - 对于用户控件,如何设置项模板项到用户属性的绑定(bind)?

sql - 语法错误和功能的情况