MS Access 2007 在查询中旋转数据并从 Excel 调用

Posted

技术标签:

【中文标题】MS Access 2007 在查询中旋转数据并从 Excel 调用【英文标题】:MS Access 2007 pivoting data in query and calling from Excel 【发布时间】:2017-01-25 12:09:27 【问题描述】:

我对此有点困惑。 *** 上有类似的主题,但我没有找到答案,而且实际上很难知道如何描述我要搜索的内容以放入搜索框中。

我在 MS Access 数据库中有这个查询,它返回按产品和总数量分组的销售商品。数据的存储方式,它按年份细分,然后按月份再次细分(FiscalPeriod 01-12 (Jan-Dec))。目前,我的查询如下所示:

SELECT CI_item.ItemCode, CI_item.ItemCodeDesc, Im_ItemWhseHistoryByPeriod.FiscalCalYear, Im_ItemWhseHistoryByPeriod.FiscalCalPeriod, ([QuantitySold]+[QuantityIssued]-[QuantityReturnedCustomer]) AS Quantity FROM CI_item INNER JOIN Im_ItemWhseHistoryByPeriod ON CI_item.ItemCode = Im_ItemWhseHistoryByPeriod.ItemCode;

我正在尝试找出一种方法将月份放入他们自己的专栏中,以便我可以实现这样的目标:

我已尝试在 Access 查询中使用“透视视图”进行一些试验,但这并不能满足我的需求,而且我无法使用 SQL 语句从 Excel 中查询它。我考虑将其分解为许多不同的查询,但我只是想知道是否有人知道更好的方法。我根本不是 SQL 查询方面的专家,尤其是在笨拙的 Access 编辑器方面。

提前非常感谢!

【问题讨论】:

【参考方案1】:

通过想象我这样尝试的数据

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

select @cols = STUFF((SELECT ',' + QUOTENAME(fiscal_per_month) 
                    from table
                    group by fiscal_per_month
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT item_code,item_code_desc,' + @cols + ',total from 
             (
                select *,sum(quantity)over(partition by year) as total
                from table
            ) x
            pivot 
            (
                sum(quantity)
                for months in (' + @cols + ')
            ) p '

exec(@query);

【讨论】:

非常感谢您的意见。这对于 SQL Server 来说看起来很棒,但不幸的是,这是 Access 2007。【参考方案2】:

呃。这就是“Crosstab”查询的用途,所以我自己解决了这个问题。运行向导生成了这段代码,效果很好:

TRANSFORM Sum(qry_AllProducts.[Quantity]) AS SumOfQuantity

SELECT qry_AllProducts.[ItemCode], qry_AllProducts.[ItemCodeDesc], qry_AllProducts.[FiscalCalYear], Sum(qry_AllProducts.[Quantity]) AS [Total Of Quantity] FROM qry_AllProducts 按 qry_AllProducts.[ItemCode]、qry_AllProducts.[ItemCodeDesc]、qry_AllProducts.[FiscalCalYear] 分组 PIVOT qry_AllProducts.[FiscalCalPeriod];

唯一的窍门是,您实际上不能通过 Excel 中的 ADODB SQL 命令来提取它,所以我必须创建一个额外的“生成表”查询,指向交叉表的结果,然后将其作为临时表数据库中的表。然后可以从 Excel 中查询。我需要弄清楚它应该如何刷新,但这有效。感谢观看。

【讨论】:

以上是关于MS Access 2007 在查询中旋转数据并从 Excel 调用的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MS Access 2007 中获取 sql 查询

如何在 MS ACCESS 2007 查询中使用 LIMIT

如何通过 Java 从 MS Access 2007 数据库中读取 Unicode 字符?

通过 VBA 自动使用查询从 Ms Access 2007 生成报告

如何在 Ms Access 2007 中执行 Mysql 查询

MS Access 2007 查询不在 SQL Server 2008 上运行