【发布时间】:2020-04-07 07:26:49
【问题描述】:
我已经开始开发一个 Access 数据库供我的机构使用,从事件管理开始。我一直在尝试开发一种表格,作为我们所有事件的主索引,以及打开调查相关表格以供调查员使用的中心。我开发了三个常规表和一个联结表:
- 调查 - 一般信息
- 目标
- 受害者
- 目标/受害者加入者
General Info Table 与 Targets 具有一对多的关系,而 Targets 和 Victims 具有通过 joiner 表连接的多对多关系。该连接表也是指控和结果所在的位置,因此每个目标和受害者都有自己的相关指控和结果。
我运行了两个查询;一个名为 Tar/VicQuery 的文件,其中包含从上述相关表格中收集的信息:
InternalIncidentID TargetID TargetFullName VictimID VictimFullName Offense(s) Outcome(s)
JAW-1 TAR-1 Smith Davie VIC-1 Harris Michelle Neglect Substantiated
JAW-1 TAR-1 Smith Davie VIC-2 Jones Mary Neglect Substantiated
JAW-2 TAR-2 Thimble John VIC-3 Man Joseph Abuse Substantiated
JAW-2 TAR-3 Rocket Sammy VIC-3 Man Joseph Abuse Substantiated
JAW-2 TAR-4 Berkowitz Josh VIC-3 Man Joseph Abuse Substantiated
JAW-3 TAR-5 McGowen Melissa VIC-4 Root James Theft Founded
JAW-3 TAR-5 McGowen Melissa VIC-5 Lopez Randy Theft Founded
JAW-3 TAR-5 McGowen Melissa VIC-6 Martino Bruno Theft Founded
JAW-3 TAR-6 Thimble John VIC-4 Root James Theft Unfounded
JAW-3 TAR-6 Thimble John VIC-5 Lopez Randy Theft Unfounded
JAW-3 TAR-6 Thimble John VIC-6 Martino Bruno Theft Founded
还有另一个运行上述查询的查询,称为 TargetQuery:
InternalIncidentID TargetName
JAW-1 Smith Davie, Smith Davie
JAW-2 Thimble John, Rocket Sammy, Berkowitz Josh
JAW-3 McGowen Melissa, McGowen Melissa, McGowen Melissa, Thimble John, Thimble John, Thimble John
上述查询使用 Allen Browne 的 ConcatRelated 方法来组合具有相同事件 ID 的数据行并连接调查的目标。我遵循了that Allen expresses on this page 的说明,包括创建相关模块、粘贴他的函数,然后尝试将其用作查询的一部分。我还希望在另一个(或相同,如果可能的话)查询中对与案件相关的受害者进行相同的查询。
TargetQuery 的 SQL 代码:
SELECT DISTINCT [Tar/Vic Query].InternalIncidentID, ConcatRelated("TargetFullName","[Tar/Vic Query]","InternalIncidentID= " & [Tar/Vic Query].[InternalIncidentID]) AS TargetName
FROM [Tar/Vic Query];
如上所示,结果与我希望达到的结果非常接近。理想的情况是重复名称不再作为连接的一部分出现。 我该如何做到这一点?
我尝试使用唯一值来解决这个问题,这在一个方面有很大帮助(将记录数从 11 减少到 3),但没有解决“Davie Smith”在该字段中多次出现的问题案(在这种情况下,他有两个受害者,如第一表所示)。不幸的是,这只是我的难题之一,因为我对 Access 和 SQL 还很陌生。我希望,到此结束时,我的表单将如下所示(在目标和受害者名称之前有更多字段,但你明白了):
InternalIncidentID TargetName VictimName
JAW-1 Smith Davie Harris Michelle, Jones Mary
JAW-2 Thimble John, Rocket Sammy, Berkowitz Josh Man Joseph
JAW-3 McGowen Melissa Thimble John Root James, Lopez Randy, Martino Bruno
对此可以提供的任何帮助/教育将不胜感激。我很清楚我目前对该计划的理解存在差距,并感谢就这个问题向我提供的所有耐心。以下是我在提出这个问题之前查看过的本网站和其他地方的主题:
【问题讨论】:
-
如果我不清楚,我很抱歉;我希望在上面的第二个表格中显示类似“Smith Davie,Smith Davie”的字段,如果他是唯一的目标,则只说“Smith Davie”。同样,我想突出显示从第一个表的排列连接的一个字段中的所有目标。我在上面的 SQL 查询代码中也使用了 DISTINCT。
-
InternalIncidentID 是文本,所以需要多加引号:"[InternalIncidentID]="""& [Tar/Vic Query].[InternalIncidentID] & """"
-
ID 字段真的是文本类型,还是您实际上将自动编号 ID 保存到这些字段中并显示相关的描述性值?换句话说,什么是 PK/FK 链接字段?建议不要在命名约定中使用空格或标点符号/特殊字符。
-
每个表中的 PK 是一个自动编号,其格式为 JAW、TAR 或 VIC,并在编号前加一个“-”。 Internal Incident ID 是 General info 表的 PK 和 Target 表的外键,TargetID 是 Target Table 的 PK,VictimID 是 Victim Table 的 PK。后两者连接在一个联结表上,该联结表同时具有 TargetID 和 VictimID 作为 PK,以创建多对多关系。
-
那么 InternalIncidentID 真的是一个数字字段,带有前缀显示格式?
标签: sql forms ms-access module concatenation