从事故管理开始,我已经开始开发供我的机构使用的Access数据库。我一直在尝试开发一种表格,该表格可以充当我们所有事件的主要索引,并且可以作为一个中心,以打开调查人员将要使用的调查相关表格。我开发了三个常规表和一个联结表:
常规信息表与目标具有一对多的关系,目标和受害人具有通过联接器表连接的多对多关系。该表也可以用于指控和结果,以便每个目标和受害者都有自己的关联指控和结果。
我跑了两个查询;一个名为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
对此将提供的任何帮助/教育将不胜感激。我非常了解我目前对这个程序的理解上的差距,并感谢我对这个问题的所有耐心。
艾伦的过程仅允许向该功能提供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查询。