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

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

我在 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 编辑器方面。

提前非常感谢!

【问题讨论】:

    标签: sql excel ms-access vba


    【解决方案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 中查询。我需要弄清楚它应该如何刷新,但这有效。感谢观看。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-23
      • 1970-01-01
      • 2011-08-31
      • 1970-01-01
      • 1970-01-01
      • 2015-05-16
      • 2013-09-26
      • 1970-01-01
      相关资源
      最近更新 更多