一尘不染

ConcatRelated()函数可在表单上提供唯一值

sql

从事故管理开始,我已经开始开发供我的机构使用的Access数据库。我一直在尝试开发一种表格,该表格可以充当我们所有事件的主要索引,并且可以作为一个中心,以打开调查人员将要使用的调查相关表格。我开发了三个常规表和一个联结表:

  • Investigations - General Information
  • Target(s)
  • Victim(s)
  • Target/Victim 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的数据行,并串联调查的目标。我遵循了Allen在此页面上表达的说明,包括创建关联的模块,粘贴其功能,然后尝试将其用作查询的一部分。我还希望在另一个(或相同,如果可能的话)查询中对与案件相关的受害者进行相同的查询。

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”在一个案例中多次出现的问题(在如表1所示,他有两名受害者。不幸的是,这只是我的难题之一,因为我一般对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

对此将提供的任何帮助/教育将不胜感激。我非常了解我目前对这个程序的理解上的差距,并感谢我对这个问题的所有耐心。


阅读 245

收藏
2021-03-08

共1个答案

一尘不染

艾伦的过程仅允许向该功能提供WHERE标准。我见过的其他版本允许传递整个SQL语句。

将必须建立2个查询,为每个InternalIncidentID返回DISTINCT值-
一个用于目标,一个用于受害者。这些查询将作为对Allen函数的每个调用的来源。

qryIncTargets

SELECT DISTINCT InternalIncidentID, TargetFullName FROM [Tar/Vic Query];

受害者

SELECT DISTINCT InternalIncidentID, VictimFullName FROM [Tar/Vic Query];

qryConcatenate

SELECT Investigations.InternalIncidentID, 
ConcatRelated("TargetFullName","qryIncTargets","InternalIncidentID='" & [InternalIncidentID] & "'") AS Tars, 
ConcatRelated("VictimFullName","qryIncVictims","InternalIncidentID='" & [InternalIncidentID] & "'") AS Vics
FROM Investigations;

可以消除[Tar / Vic查询],而是使用[目标/受害者连接者]到[目标]和[受害者]的JOIN构建两个DISTINCT查询。

2021-03-08