2017-02-01 23 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可以糾正我,但我相信他有日期字段,並希望按月生成聚合,而不是每月有一個字段,並且希望將它們合併。 –