2017-02-01 14 views
0

的总和(数量)我想显示每个月的金额数量当月相应SQL-显示每个月的字段名的项目

ItemCode | October | November | December | January 
PZ   0   0   12   36 

到目前为止,我的查询看起来像enter image description here

而我的SQL是

SELECT Detail.ItemCode 
    ,SUM(Detail.QuantityOrdered) AS Total_Quantity 
    ,MonthName(Month([Header.OrderDate])) AS ['Month Name'] 
FROM Detail 
INNER JOIN Header ON Detail.SalesOrderNo = Header.SalesOrderNo 
WHERE Header.OrderDate >= dateadd("m", - 4, DATE()) 
GROUP BY Detail.ItemCode 
    ,Header.OrderDate 
ORDER BY SUM(Detail.QuantityOrdered) DESC; 

和我Header.OrderDate看起来像2016年12月25日。

我应该使用crossover?我查了很多,但似乎没有适用。提前谢谢你!

+0

可能变换做一个更好的工作 - http://ss64.com/access/transform.html – Jayvee

回答

1

正如@Jayvee提到,Transform看起来很有希望。

或者,你可以做有条件的聚集,已经有一段时间我与Access工作,但这样的事情:

SELECT Detail.ItemCode 
     , SUM(CASE WHEN Month([Header.OrderDate]) = 1 THEN Detail.QuantityOrdered END) AS 'January' 
     , SUM(CASE WHEN Month([Header.OrderDate]) = 2 THEN Detail.QuantityOrdered END) AS 'February' 
     , SUM(CASE WHEN Month([Header.OrderDate]) = 3 THEN Detail.QuantityOrdered END) AS 'March'   
    FROM Detail 
    INNER JOIN Header ON Detail.SalesOrderNo = Header.SalesOrderNo 
    WHERE Header.OrderDate >= dateadd("m", - 4, DATE()) 
    GROUP BY Detail.ItemCode 
    ORDER BY Detail.ItemCode; 

编辑:看起来Transform处理它动态地已经,这样的事情:

TRANSFORM SUM(Detail.QuantityOrdered) 
SELECT Detail.ItemCode 
FROM Detail 
INNER JOIN Header ON Detail.SalesOrderNo = Header.SalesOrderNo 
WHERE Header.OrderDate >= dateadd("m", - 4, DATE()) 
GROUP BY Detail.ItemCode 
PIVOT MonthName(Month([Header.OrderDate])) 

不知道是否会处理功能在PIVOT你可能需要一个子查询,以获得MONTHNAME或其他解决方法。

+0

谢谢你的回答。无论如何,我可以动态设置MonthName吗?例如,二月,它将从十一月到二月开始:)非常感谢你! –

+0

我的歉意是我不清楚它。提前致谢! –

+0

@JohnTipton它看起来像'TRANSFORM'可能已经动态地处理它,并不确信我的尝试是正确的,但至少是一个起点。 –

0

在我看来,你要找的是UNPIVOT,但它不能在MS-接取存在。

复制最简单的方法是这样的:

SELECT ItemCode, October as Total_Quantity, 'October' as MonthName 
UNION      
SELECT ItemCode, November as Total_Quantity, 'November' as MonthName 
UNION      
SELECT ItemCode, December as Total_Quantity, 'December'as MonthName 
UNION      
SELECT ItemCode, January as Total_Quantity, 'January' as MonthName 
+0

谢谢您的回答。无论如何,我可以动态设置MonthName吗?例如,二月,它将从十一月到二月开始:)非常感谢你! –

+0

据我所知,在Access中,我怀疑这是可能的。在这种情况下,我会延长联盟,直到他们覆盖12个月。 – Lobo

+0

如果我错了,OP可以纠正我,但我相信他有日期字段,并希望按月生成聚合,而不是每月有一个字段,并且希望将它们合并。 –