0

Access 2007を使用して、部門内の複数のユニットから統計(Excel)をインポートしています。それらは同様のフィールドを共有しますが、追跡する必要のあるユニット固有のデータ/フィールドもあるため、各ユニットには独自のテーブルがあります。

テーブル:UnitA-(フィールド:日付、車、ボート、タグ、銃、行方不明者など)

テーブル:UnitB-(フィールド:日付、車、ボート、タグ、銃、ベンチワラントなど)

テーブル:UnitC-(フィールド:日付、車、ボート、タグ、銃、指紋など)

開始日と終了日を照会する要約レポートを作成してから、以下を表示するレポートを作成する必要があります。

各レコードの個々のフィールドの合計、つまりSum([Fingerprints])各レコードの共有フィールドのそれぞれの合計、つまりSum([UnitA!Cars])+ Sum([UnitB!Cars])など。

ユニットごとに問題なくレポートを作成できます。

私の問題は、3つのユニットレポートを停止し、サブレポートを使用しようとしたときに始まります。アクセスすると、新しい開始日と終了日を入力するように求められます。

誰かがより良い解決策を持っていますか?各クエリ内からアクセスできる開始日と終了日フィールドを含む「プロンプト」フォームを作成する必要がありますか?

4

2 に答える 2

2

さらに良い-共有ユニットデータをユニットテーブルにインポートしてから、統計データを詳細テーブルにインポートします。

CREATE TABLE Unit (
    UnitID CONSTRAINT PK_unit PRIMARY KEY,
    UnitNo VarChar,
    OtherUnitInfo )

CREATE TABLE DetailCategory (
    CategoryID CONSTRAINT PK_DetailCategory PRIMARY KEY,
    Category Varchar ) -- example rows: 'Guns' 'Missing Persons' etc

CREATE TABLE Unit_DetailCategory (
    UnitID FOREIGN KEY (UnitID) REFERENCES Unit (UnitID),
    CategoryID FOREIGN KEY (CategoryID REFERENCES DetailCategory (CategoryID),
    Qty Long )

次に、次のようなTRANSFORM / PIVOTを使用して、合計値を取得できます。

TRANSFORM Sum(Unit_DetailCategory.Qty) AS SumOfQty
SELECT 'Sum of Unit Values' AS FunctionName
FROM DetailCategory 
RIGHT JOIN (Unit INNER JOIN Unit_DetailCategory 
    ON Unit.UnitID = Unit_DetailCategory.UnitID) 
    ON DetailCategory.CategoryID = Unit_DetailCategory.CategoryID
GROUP BY 'Sum of Unit Values'
PIVOT DetailCategory.Category

注-私の構文はCREATEステートメントに欠陥がある可能性があり、必要なものを正確に取得するには、TRANSFORM/PIVOTを操作する必要がある場合があります。しかし、これは私のマシンでは機能します。

于 2012-10-01T15:31:13.537 に答える
1

ユニオンを使用して単一のクエリを作成できます

SELECT Date, Cars, Boats, Tags, Guns,
   [Missing Persons], Null AS [Bench Warrants], Null AS Fingerprints FROM UnitA
UNION ALL
SELECT Date, Cars, Boats, Tags, Guns,
   Null,              [Bench Warrants],         Null                 FROM UnitB
UNION ALL
SELECTG Date, Cars, Boats, Tags, Guns,
   Null,              Null,                     Fingerprints         FROM UnitC

各SELECTには同じ数のフィールドが必要です。最初のSELECTのフィールド名が結果に使用されます。


ただし、別のDB設計をお勧めします。すべての共通フィールドを共通のテーブルに配置し、ユニット固有のフィールドを、1対1の関係で結合する他のテーブルに配置します

CREATE TABLE Unit (
    UnitID  CONSTRAINT PK_unit PRIMARY KEY,
    Date datetime,
    Cars long,
    Boats long,
    Tags long,
    Guns long
)

CREATE TABLE UnitA (
    UnitID  CONSTRAINT PK_unitA PRIMARY KEY,
    [Missing Persons] Long
)
ALTER TABLE UnitA
   ADD CONSTRAINT FK_unitA_unit
   FOREIGN KEY (UnitID) REFERENCES Unit (UnitID)


CREATE TABLE UnitB (
    UnitID  CONSTRAINT PK_unitB PRIMARY KEY,
    [Bench Warrants] Long
)
ALTER TABLE UnitB
   ADD CONSTRAINT FK_unitB_unit
   FOREIGN KEY (UnitID) REFERENCES Unit (UnitID)


CREATE TABLE UnitC (
    UnitID  CONSTRAINT PK_unitC PRIMARY KEY,
    Fingerprints Long
)
ALTER TABLE UnitC
   ADD CONSTRAINT FK_unitC_unit
   FOREIGN KEY (UnitID) REFERENCES Unit (UnitID)

これで、左結合を使用してクエリを作成できます。


さらに簡単な設計は、テーブルを1つだけ作成し、空のフィールドを許可することです。

CREATE TABLE Unit (
    UnitID  CONSTRAINT PK_unit PRIMARY KEY,
    Date datetime,
    Cars long,
    Boats long,
    Tags long,
    Guns long,
    [Missing Persons] Long,
    [Bench Warrants] Long,
    Fingerprints Long
)

Excelテーブルを直接インポートする代わりに、Excelテーブルをリンクしてから、カスタマイズされた追加クエリを使用してそれらのコンテンツを共通テーブルに追加します。

于 2012-10-01T14:41:44.163 に答える