我对高级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/