生成包含多个表/查询的MS Access报告

时间:2012-10-01 14:23:57

标签: ms-access report

我使用Access 2007从部门内的多个单元导入统计信息(Excel)。虽然它们共享相似的字段,但每个单元都有自己的表,因为它们还具有需要跟踪的单元特定数据/字段。

表:UnitA - (字段:日期,汽车,船,标签,枪支,失踪人员等)

表:UnitB - (字段:日期,汽车,船,标签,枪支,替补证书等)

表:UnitC - (字段:日期,汽车,船,标签,枪支,指纹等)

我需要创建一个查询START DATE和END DATE的摘要报告,然后生成一个将显示的报告:

每个记录中每个字段的总和即Sum([Fingerprints]) 每个记录的每个共享字段的总和即Sum([UnitA!Cars])+ Sum([UnitB!Cars])等。

我可以毫无问题地为每个单位创建报告。

当我停止三个单元报告并尝试使用子报告时,我的问题就开始了。 Access将提示我新的开始日期和结束日期。

有没有人有更好的解决方案?我应该创建一个“提示”表单,其中包含可以从每个查询中访问的“开始日期”和“结束日期”字段吗?

2 个答案:

答案 0 :(得分: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才能获得您想要的内容。但这适用于我的机器。

答案 1 :(得分: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的字段名称将用于结果。


但是,我建议另一个数据库设计。将所有commom字段放在公共表中,并将特定于单元的字段放在以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表,然后使用自定义追加查询将其内容附加到公用表。