我对此感到有点难过。 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;
我试图找出一种方法将这几个月拉到自己的专栏中,这样我就可以实现这样的目标:
我尝试过使用" Pivot View"在Access查询中,但这并没有给我我想要的东西,并且我无法使用SQL语句从Excel查询它。我考虑将其分解为许多不同的查询,但我只是想知道是否有人知道更好的方法。我在SQL查询方面根本不是专家,特别是在笨拙的Access编辑器中。
非常感谢提前!
答案 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查询。我需要弄清楚它应该如何刷新,但这是有效的。谢谢你的期待。