MS Access 2007在查询中调整数据并从Excel

时间:2017-01-25 12:09:27

标签: sql excel access-vba

我对此感到有点难过。 Stackoverflow上有类似的主题,但我还没有找到答案,实际上很难知道如何描述我在搜索框中搜索的内容。

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

enter image description here

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;

我试图找出一种方法将这几个月拉到自己的专栏中,这样我就可以实现这样的目标:

enter image description here

我尝试过使用" Pivot View"在Access查询中,但这并没有给我我想要的东西,并且我无法使用SQL语句从Excel查询它。我考虑将其分解为许多不同的查询,但我只是想知道是否有人知道更好的方法。我在SQL查询方面根本不是专家,特别是在笨拙的Access编辑器中。

非常感谢提前!

2 个答案:

答案 0 :(得分:0)

想象我试过的数据

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);

答案 1 :(得分:0)

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

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] 来自qry_AllProducts GROUP BY qry_AllProducts。[ItemCode],qry_AllProducts。[ItemCodeDesc],qry_AllProducts。[FiscalCalYear] PIVOT qry_AllProducts。[FiscalCalPeriod];

唯一的技巧是你不能通过Excel中的ADODB SQL命令实际提取这个,所以我不得不创建一个额外的“Make Table”查询,指向交叉表的结果,然后将其作为临时值数据库中的表。然后可以从Excel查询。我需要弄清楚它应该如何刷新,但这是有效的。谢谢你的期待。