我已经开始开发一个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的ConcatRelated方法组合具有相同事件ID的数据行,并将调查的目标连接起来。我遵循了艾伦在这页上表达的的指令,包括创建关联模块,粘贴他的函数,然后尝试使用它作为查询的一部分。我也希望在另一个(或同样的,如果可能的话)对案件的受害者进行同样的查询。
用于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如果能在这方面提供任何帮助/教育,我们将不胜感激。我很清楚我目前对这个项目的理解上的差距,并感谢在这个问题上给我的所有耐心。以下是我在提出这个问题之前,在这个网站和其他地方浏览过的文章:
发布于 2019-12-14 02:00:19
Allen的程序只允许给函数提供标准。我见过的其他版本允许传递整个SQL语句。
必须构建两个查询,为每个InternalIncidentID返回不同的值-一个用于目标,一个针对受害者。这些查询将是对Allen函数的每个调用的源。
qryIncTargets
SELECT DISTINCT InternalIncidentID, TargetFullName FROM [Tar/Vic Query];
qryIncVictims
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查询,而是使用Target/受害者Joiner到Target(s)和受害者(S)的联接来构建这两个不同的查询。
发布于 2021-04-11 16:43:51
这篇文章有点老了,但只是偶然发现它试图做一些类似的事情(或者可能是完全一样的)。我正在从一个表中提取数据,并使用Allen的ConcatRelated方法将每个ID的一行卷到一个带有逗号分隔值的行。
我发现,ConcatRelated函数的一个简单模块将消除逗号分隔的卷起中重复的值。
发自:
'Build SQL string, and get the records.
strSql = "SELECT " & strField & " FROM " & strTable
If strWhere <> vbNullString Then
strSql = strSql & " WHERE " & strWhere
End If至:
'Build SQL string, and get the records.
strSql = "SELECT DISTINCT " & strField & " FROM " & strTable
If strWhere <> vbNullString Then
strSql = strSql & " WHERE " & strWhere
End If离开这里,以防这对未来的人有帮助!
https://stackoverflow.com/questions/59329412
复制相似问题