基于两个表连接 Access 中的行

Concatenate rows in Access based on two tables

我想将基于位置、日期和群组编号的群组成员资格汇总到一个以空格作为分隔符的字段中。

Table 洞察力:

    GROUP_IND | DATE_IND | STUDY_SITE | Subarea   
    01           9/9/2001   SDP          Shum
    01           9/9/2001   KOD          North 
    01           9/10/2001  SDP          Shum
    02           9/10/2001  SDP          Shum
    01           9/10/2001  KOD          East

Table IMAGES 有:

GROUP_IMG | DATE    | STUDY_SITE | INDIVIDUAL
01          9/9/2001  SDP           003
01          9/9/2001  SDP           004
01          9/9/2001  KOD           A16
01          9/9/2001  KOD           019
01          9/9/2001  KOD           021
01          9/10/2001 SDP           003
02          9/10/2001 SDP           006

我想要的是:

GROUP | DATE    | STUDY_SITE | Subarea | Individuals
01      9/9/2001  SDP           Shum      003   004
01      9/9/2001  KOD           North     A16   019   021

我使用 Allen Browne 的 ConcatRelated 函数实现了以下代码。

SELECT
    i.GROUP_IND,
    i.DATE_IND,
    i.STUDY_SITE,
    i.Subarea,
    ConcatRelated(
        "INDIVIDUAL",
        "IMAGES",
        "GROUP_IMG = '" & [GROUP_IND] & "'"
         and "DATE = '" & [DATE_IND] & "'"
         and "STUDY_SITE = '" & [STUDY_SITE]"'"
        ) AS Individuals
FROM INDSIGHT AS i;

该查询运行没有错误,但其结果不正确。结果列出了每个人,而不仅仅是特定群体的个人。

注意 DATE 字段是 Date/Time,GROUP 字段是文本。

根据您的示例数据,我认为此查询 returns 您请求的结果。

SELECT
    i.GROUP_IND,
    i.DATE_IND,
    i.STUDY_SITE,
    i.Subarea,
    ConcatRelated(
        "INDIVIDUAL",
        "IMAGES",
        "GROUP_IMG = '" & i.GROUP_IND
            & "' AND [DATE] = " & Format(i.DATE_IND, "\#yyyy-m-d\#")
            & " AND STUDY_SITE = '"
            & i.STUDY_SITE & "'",
        "INDIVIDUAL",
        " "
        ) AS Individuals
FROM INDSIGHT AS i;

备注:

  • 名为[DATE]的字段用方括号括起来,因为它是一个保留字
  • 文字日期值用 # 个字符分隔
  • ConcatRelated的第三个参数必须是一个字符串;如果你需要在那里调整任何东西,请小心引用
  • 我为第四个参数添加了一个字符串,strOrderBy,因为数据库引擎不允许我在提供第五个参数时将其留空,strSeparator 。更改顺序以品尝。 :-)

如果您的实际完整数据集包含 GROUP_INDDATE_IND 的相同组合的多行、STUDY_SITESubarea,您可能希望将其改为 GROUP BY 查询。在创建 GROUP BY 时将 ConcatRelated 留在外面,只有在 GROUP BY 正常工作后才将其添加回来。