2012-10-01 110 views
0

使用Access 2007可以從部門內的多個單位導入統計信息(Excel)。儘管它們共享相似的字段,但每個單元都有它自己的表格,因爲它們也具有需要跟蹤的單元特定數據/字段。生成包含多個表/查詢的MS Access報告

表:盟 - (字段:日期,汽車,船,標籤,槍支,失蹤人員等)

表:UnitB - (字段:日期,汽車,船,標籤,槍支,臺式權證等)

表:UnitC - (字段:日期,汽車,船,標籤,槍支,指紋等)

我需要創建一個查詢開始日期和結束日期的總結報告和然後生成將顯示的報告:

來自每個記錄的每個單獨字段的總和rd即Sum([Fingerprints]) 每個記錄的每個共享字段的總和,即Sum([UnitA!Cars])+ Sum([UnitB!Cars])等。

我可以爲每個記錄創建一個報告個人單位沒有任何問題。

我的問題開始時,我ceate三個單位報告,並嘗試使用子報表。訪問會提示我輸入新的開始日期和結束日期。

有沒有人有更好的解決方案?我應該創建一個「提示」表單,其中包括可以從每個查詢中訪問的「開始日期」和「結束日期」字段?

回答

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的字段名稱將用於結果。


但是,我建議另一個數據庫設計。將所有的黎民領域中的公共表並放置單元中的特定字段,你在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) 

現在加入左連接,你可以創建一個查詢其他表。


一個更簡單的設計是隻創建一個表,並允許空字段

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表格,然後添加自己的內容給具有自定義追加查詢的公用表。

+0

我也會推薦第一種或第三種解決方案,但這主要取決於OP對數據的控制程度。如果他從SQL Server的表中拉出,那麼聯盟可能是最好的選擇。否則,重新設計可能會更好。 – PowerUser

+0

我要給你的第二個選擇一個嘗試。由於我們目前正在使用Excel電子表格導入多個單元的多個字段的統計信息,因此我將無法創建一個montster表。 – Rory

+0

Power,我喜歡第三種解決方案,但當我最終將它們從Excel導入到Access或Alpha Five表單提交時,我必須這樣做。 – Rory

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) 

然後,您可以使用變換/ 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語句是有缺陷的,你可能有變換/ PIVOT發揮得正是你想要的。但是這在我的機器上運行。

+0

我喜歡這個想法。主表和細節表。當我最終說服員工擺脫Excel電子數據表並繼續使用Access或Alpha Five解決方案時,我可能會這樣做。 – Rory