ソースとしてクロス集計を使用して追加のクエリが必要になります。特殊クエリであるクロスタブは、集計全体を除くピボットされた値の式を許可しません。
クロス集計クエリ
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
:しかし、その前に、2番目のクエリの分母となる
Count(list_Breakages.Class_Cat)
などの新しいフィールドを追加
また、条件付き集計クエリを検討してください。特に、投票された列は5のほんの一握りです。これは通常、ほとんどのRDMSで使用されるピボットクエリフォームです(クロス集計はMS Access SQLに固有のものです)。ここでは、階層化された式が使用できます。列の値が20以上の場合は、上記の2番目のクエリのアプローチを検討してください:
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;
あなたは伝説です!あなたの最後のコードブロックは素晴らしいです。ご協力ありがとうございました! – Duncan
ハハ...私は助けることができてうれしい。ハッピーコーディング! – Parfait