我使用Access 2007从部门内的多个单元导入统计信息(Excel)。虽然它们共享相似的字段,但每个单元都有自己的表,因为它们还具有需要跟踪的单元特定数据/字段。
表:UnitA - (字段:日期,汽车,船,标签,枪支,失踪人员等)
表:UnitB - (字段:日期,汽车,船,标签,枪支,替补证书等)
表:UnitC - (字段:日期,汽车,船,标签,枪支,指纹等)
我需要创建一个查询START DATE和END DATE的摘要报告,然后生成一个将显示的报告:
每个记录中每个字段的总和即Sum([Fingerprints]) 每个记录的每个共享字段的总和即Sum([UnitA!Cars])+ Sum([UnitB!Cars])等。
我可以毫无问题地为每个单位创建报告。
当我停止三个单元报告并尝试使用子报告时,我的问题就开始了。 Access将提示我新的开始日期和结束日期。
有没有人有更好的解决方案?我应该创建一个“提示”表单,其中包含可以从每个查询中访问的“开始日期”和“结束日期”字段吗?
答案 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表,然后使用自定义追加查询将其内容附加到公用表。