2012-10-01 53 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