2016-09-23 11 views
0

私はアクセス時にオフラインDBを構築しています。データをグループ化するときは、企業ID、日付、Prelim Sizeをグループ化します。次に、各レコードの破損を表示するための分類がさらにあります。破損には5つのカテゴリがあり、ピボットテーブルを使用して列見出しに変換されます。クロス集計クエリのレコードグループの合計の割合としてレコード数を表示Access SQL

サブグループのレコード数がそのグループのパーセンテージを計算する必要があります。

私は結果を生成するピボットテーブルを持っていますが、私が欠けているのは、その行の合計に対する割合としてその数値を表示することです。だから、最初のレコードに、私は追加したい5 + 2 + 2 + 3 15で、15

現在のテーブルの結果のパーセントとして、これらの各値を示し+ 3:

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

ソースとしてクロス集計を使用して追加のクエリが必要になります。特殊クエリであるクロスタブは、集計全体を除くピボットされた値の式を許可しません。

クロス集計クエリ

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; 
+0

あなたは伝説です!あなたの最後のコードブロックは素晴らしいです。ご協力ありがとうございました! – Duncan

+0

ハハ...私は助けることができてうれしい。ハッピーコーディング! – Parfait

関連する問題