每月汇总金额的 SQL 数据透视表

Posted

技术标签:

【中文标题】每月汇总金额的 SQL 数据透视表【英文标题】:SQL Pivot table for monthly aggregate amount 【发布时间】:2015-01-13 21:18:15 【问题描述】:

我在 sql 方面没有太多经验。在我使用 ucanaccess 库的小型 Java 程序中,我能够在创建一个简单的表(名为 ReportSales)后执行一些简单的查询。表格是:

ID  DATE            PRODUCT     SALES       FEES
1   2014-10-02      productA    10.000      100
2   2014-09-02      productC    12.000      240
3   2014-09-02      productA    8.000        80
4   2014-11-02      productB    7.000       105
5   2014-08-02      productB    6.000        90
..  ..........      ........    ......      ....
..  ..........      ........    ......      ....

最后一项任务是创建一个数据透视表,我将在其中插入每种产品的月销售额。比如:

PRODUCT     AUG         SEP         OCT      NOV
productA    0         8.000      10.000        0
productB    6000          0           0     7000
productC    0        12.000           0        0

另一个月费支点

我的(错误)尝试是:

SELECT [8] as AUG, [9] as SEP, [10] as OCT, [11] as NOV
FROM
(SELECT SALES,MONTH(DATE) 
    FROM ReportSales) AS tmp
PIVOT
(
SUM(SALES)
FOR MONTH(DATE) IN ([8], [9], [10], [11])
) AS PivotTable

有人可以帮助我吗?提前致谢

【问题讨论】:

如果你在子查询中包含PRODUCT,你应该得到你想要的结果。 试过但没用 “不起作用”是什么意思?这不是一个很有帮助的信息。 对不起,问题似乎是第一行,我有异常:原因:java.sql.SQLSyntaxErrorException:用户缺少权限或找不到对象:AUG 你用的是什么数据库? 【参考方案1】:

UCanAccess 支持 Pivot 查询,前提是它们内置在 Access 中,因此您必须首先使用 Access IDE 创建交叉表查询。 或者您可以直接在 Access 中创建一个新查询,直接输入以下 SQL:

TRANSFORM sum(ReportSales.sales) AS SalesCount
SELECT ReportSales.product
FROM ReportSales
GROUP BY ReportSales.product
PIVOT Format([date],"mmm");

然后假设您将查询保存为 query1,您只需使用 UCanAccess 执行:

Select * from query1;

【讨论】:

非常感谢您的回答 非常感谢您的提问

以上是关于每月汇总金额的 SQL 数据透视表的主要内容,如果未能解决你的问题,请参考以下文章

分类汇总和数据透视表的优缺点

数据透视表 - 将付款合并为一个

如何删除透视表中的很多汇总行

SQL数据库中如何从A表自动更新数据到B表?

快速取消数据透视表的分类汇总行和总计行

excel如何将数据透视表中的汇总项去掉?