【问题标题】:Generate MS Access report that includes multiple tables/queries生成包含多个表/查询的 MS Access 报告
【发布时间】:2012-10-01 14:23:56
【问题描述】:

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

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

Table:UnitB -(Fields:Date,Cars, Boats, Tags, Guns, Bench Warrants, etc.)

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

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

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

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

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

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

【问题讨论】:

    标签: ms-access report


    【解决方案1】:

    更好 - 将共享单位数据导入单位表,然后将统计数据导入明细表:

    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 才能准确获得所需的内容。但这适用于我的机器。

    【讨论】:

    • 我喜欢这个主意。主表和明细表。当我最终说服员工摆脱 Excel 电子表格并继续使用 Access 或 Alpha 5 解决方案时,我可能会这样做。
    【解决方案2】:

    您可以使用联合创建单个查询

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


    但是,我建议另一种数据库设计。将所有常用字段放在一个公共表中,并将特定于单位的字段放在您以一对一关系连接的其他表中

    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 表,然后使用自定义追加查询将其内容附加到公用表。

    【讨论】:

    • 我还推荐第一个或第三个解决方案,但这在很大程度上取决于 OP 对数据的控制程度。如果他从 SQL Server 中的表中提取数据,那么 Union 可能是最佳选择。否则,重新设计可能会更好。
    • 我将尝试您的第二个选项。由于我们目前正在使用 Excel 电子表格从多个单位导入大量字段的统计数据,因此我将无法创建一个 montster 表。
    • Power,我喜欢第三种解决方案,但是当我最终将它们从 Excel 导入移动到 Access 或 Alpha 5 表单提交时,它必须是这样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多