gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 16:03:33 24 4
gpt4 key购买 nike

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

  • 调查 - 一般信息
  • 目标
  • 受害者
  • 目标/受害者加入者

General Info Table 与 Targets 是一对多的关系,而 Targets 和 Victims 是通过 joiner table 连接的多对多关系。此联接表也是指控和结果所在的地方,因此每个目标和受害者都有自己的相关指控和结果。

我运行了两个查询;一个名为 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

如能就此提供任何帮助/教育,我们将不胜感激。我很清楚我目前对该程序的理解存在差距,并且感谢就此问题向我提供的所有耐心。以下是我在提出这个问题之前查看过的本网站和其他地方的主题:

Source 1 Source 2 Source 3 Source 4 Source 5

最佳答案

Allen 的程序只允许向函数提供 WHERE 条件。我见过的其他版本允许传递整个 SQL 语句。

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

qryInc目标

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

qryInc受害者

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

qry连接

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

可以消除 [Tar/Vic Query],而是使用 [Target/Victim Joiner] 到 [Target(s)] 和 [Victim(s)] 的 JOIN 构建两个 DISTINCT 查询。

关于sql - ConcatRelated() 函数在表单上提供唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59329412/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com