在Excel的「樞紐分析表」相信不少人用來分析資料,Access上也有此功能,用法與Excel幾乎相同,但SQL的查詢語法中,Access也有一個類似的查詢方式,叫做交叉資料表查詢,可以達到預期效果,但沒有樞紐分析表這麼有彈性,使用上要搭配VBA來變換SQL語句,達到預期顯示效果。
我們先以樞紐分析表進行介紹,使用以下的SQL語句建立一個查詢,名為「Q_DAY24_1」:
SELECT 客戶.公司名稱, 產品資料.產品, 訂貨明細.數量, Format([訂單日期],"YYYY-MM") AS 訂單年月
FROM (客戶 INNER JOIN 訂貨主檔 ON 客戶.客戶編號 = 訂貨主檔.客戶編號) INNER JOIN (產品資料 INNER JOIN 訂貨明細 ON 產品資料.產品編號 = 訂貨明細.產品編號) ON 訂貨主檔.訂單號碼 = 訂貨明細.訂單號碼;
「設計檢視」狀態下如下:
「資料工作表」檢視如下:
我們切換到「樞紐分析表檢視」
將欄位拉到以下位置:
使用VBA開啟樞紐分析表方法如下:
Sub 開啟樞紐分析表範例()
DoCmd.OpenQuery "Q_DAY24_1", acViewPivotTable, acReadOnly
End Sub
但很常發現,使用VBA開啟查詢為樞紐分析表檢視時,Access會卡住,然後就無法復原,不確定是什麼樣的原因。
後面來介紹使用交叉資料表查詢,Access有內建精靈來逐步導入,但我們也可以手動方式來建立,以下我們先建立一個查詢,名為「Q_DAY24_2」:
SELECT 客戶.公司名稱, 產品資料.產品, Sum(訂貨明細.數量) AS 總計
FROM (客戶 INNER JOIN 訂貨主檔 ON 客戶.客戶編號 = 訂貨主檔.客戶編號) INNER JOIN (產品資料 INNER JOIN 訂貨明細 ON 產品資料.產品編號 = 訂貨明細.產品編號) ON 訂貨主檔.訂單號碼 = 訂貨明細.訂單號碼
GROUP BY 客戶.公司名稱, 產品資料.產品
「設計檢視」狀態下如下:
「資料工作表」檢視如下:
隨後,我們將原本的SQL語句的前後加上要進行分析的項目:
****TRANSFORM Sum(訂貨明細.數量) AS 數量之總計
SELECT 客戶.公司名稱, 產品資料.產品, Sum(訂貨明細.數量) AS 總計
FROM (客戶 INNER JOIN 訂貨主檔 ON 客戶.客戶編號 = 訂貨主檔.客戶編號) INNER JOIN (產品資料 INNER JOIN 訂貨明細 ON 產品資料.產品編號 = 訂貨明細.產品編號) ON 訂貨主檔.訂單號碼 = 訂貨明細.訂單號碼
GROUP BY 客戶.公司名稱, 產品資料.產品
****PIVOT Format([訂單日期],"YYYY-MM")
TRANSFORM放上匯總數量,PIVOT(樞紐)則放要訂單的年月資料,以年月資料區分匯總數量。
「設計檢視」狀態下如下:
「資料工作表」檢視如下:
隨後出來,就會是類似樞紐分析表的內容,這語句可以用於表單中的清單方塊中,您可以依照自己的需求,由VBA程式合成所需的語句,於清單方塊中使用。
以上的分享,希望對各位有幫助。