0

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

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

表:UnitB -(字段:日期,汽车,船,标签,枪支,板凳权证等)

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

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

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

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

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

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

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 的字段名称将用于结果。


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

于 2012-10-01T14:41:44.163 回答