2016-09-23 104 views
0

我在訪問中創建離線數據庫,並在分組數據時,我將公司ID,日期和Prelim大小分組。然後還有一個分類來顯示每條記錄的損壞情況。有5個類別的破損,然後使用數據透視錶轉換爲列標題。在交叉表查詢中顯示記錄計數佔記錄組總數的百分比訪問SQL

我需要計算一個子組的記錄計數的百分比。

我有數據透視表產生的結果,但我缺少的是顯示該數字佔該行總數的百分比。所以在第一記錄,我想加起來5 + 2 + 2 + 3 + 3,其是15,和顯示每個這些值作爲15.

當前表的結果的百分比:

enter image description here

Bag_Company_ID,Shift_Date,Prelim_Size,1 - 未破裂,2 - 碎裂,3 - 輕輕破碎,4 - 重破碎,5 - 片段

10 2016年5月20日10的Ct 5 2 2 3 3

10 2016/05/20 3 - 4 Ct 4 5 1 3 5

10 2016年5月20日3 - 6的Gr 1 2 1 3 0

TRANSFORM Count(list_Breakages.Class_Cat) AS Cat 
SELECT tbl_Bags.Bag_Company_ID, Format([Audit_PreVal_Date],"Short Date") AS Shift_Date, Client_Parcels.Prelim_Size 
FROM list_Breakages INNER JOIN (tbl_Bags INNER JOIN Client_Parcels ON tbl_Bags.Bag_ID = Client_Parcels.Bag_ID) ON list_Breakages.Breakages_ID = Client_Parcels.Breakages 
WHERE (((Client_Parcels.Prelim_Size) Is Not Null)) 
GROUP BY tbl_Bags.Bag_Company_ID, Format([Audit_PreVal_Date],"Short Date"), Client_Parcels.Prelim_Size 
PIVOT list_Breakages.Class_Cat; 

回答

0

你將需要使用交叉表作爲源的附加查詢。作爲特殊查詢的交叉表不允許除了整個聚合之外的旋轉值中的表達式。然而,在這樣做之前,添加Count(list_Breakages.Class_Cat)作爲一個新的領域,其將作爲第二個查詢分母:

交叉表查詢

TRANSFORM Count(list_Breakages.Class_Cat) AS Cat 
SELECT tbl_Bags.Bag_Company_ID, Format([Audit_PreVal_Date],"Short Date") AS Shift_Date, 
     Client_Parcels.Prelim_Size, Count(list_Breakages.Class_Cat) As TotalCatCount 
FROM list_Breakages 
INNER JOIN (tbl_Bags 
INNER JOIN Client_Parcels ON tbl_Bags.Bag_ID = Client_Parcels.Bag_ID) 
    ON list_Breakages.Breakages_ID = Client_Parcels.Breakages 
WHERE (((Client_Parcels.Prelim_Size) Is Not Null)) 
GROUP BY tbl_Bags.Bag_Company_ID, Format([Audit_PreVal_Date],"Short Date"), 
     Client_Parcels.Prelim_Size 
PIVOT list_Breakages.Class_Cat; 

PCT查詢

SELECT c.Bag_Company_ID, c.Shift_Date, c.Prelim_Size, 
     (c.[1 - Unbroken]/c.TotalCatCount) As c.[1-Unbroken_Pct], 
     (c.[2 - Chipped]/c.TotalCatCount) As c.[2-Chipped_Pct], 
     (c.[3 - Lightly Broken]/c.TotalCatCount) As c.[3-Lightly-Broken_Pct], 
     (c.[4 - Heavily Broken]/c.TotalCatCount) As c.[4-Heavily-Broken_Pct], 
     (c.[5 - Fragment]/c.TotalCatCount) As c.[5-Fragment_Pct] 
FROM CrossTabQuery c 

或者,考慮一個條件聚合查詢,尤其是因爲你的pi投票的列是少數幾個5.這通常是大多數RDMS中使用的樞軸查詢表單(因爲交叉表對於MS Access SQL是唯一的)。在這裏,允許分層表達式。如果列值超過20+,請考慮以上第二種查詢方法:

SELECT tbl_Bags.Bag_Company_ID, Format([Audit_PreVal_Date],"Short Date") AS Shift_Date, 
     Client_Parcels.Prelim_Size, 
     SUM(IIF(list_Breakages.Class_Cat = '1 - Unbroken', 1, 0))/
      Count(list_Breakages.Class_Cat) AS [1 - Unbroken], 
     SUM(IIF(list_Breakages.Class_Cat = '2 - Chipped', 1, 0))/
      Count(list_Breakages.Class_Cat) AS [2 - Chipped], 
     SUM(IIF(list_Breakages.Class_Cat = '3 - Lightly Broken', 1, 0))/
      Count(list_Breakages.Class_Cat) AS [3 - Lightly Broken], 
     SUM(IIF(list_Breakages.Class_Cat = '4 - Heavily Broken', 1, 0))/
      Count(list_Breakages.Class_Cat) AS [4 - Heavily Broken], 
     SUM(IIF(list_Breakages.Class_Cat = '5 - Fragment', 1, 0))/
      Count(list_Breakages.Class_Cat) AS [5 - Fragment] 
FROM list_Breakages 
INNER JOIN (tbl_Bags 
INNER JOIN Client_Parcels ON tbl_Bags.Bag_ID = Client_Parcels.Bag_ID) 
ON list_Breakages.Breakages_ID = Client_Parcels.Breakages 
WHERE (((Client_Parcels.Prelim_Size) Is Not Null)) 
GROUP BY tbl_Bags.Bag_Company_ID, Format([Audit_PreVal_Date],"Short Date"), 
     Client_Parcels.Prelim_Size; 
+0

您先生,是傳奇!你最後一塊代碼很棒。感謝您的幫助! – Duncan

+0

哈哈......很高興我能幫上忙。快樂的編碼! – Parfait