基于两个表连接 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_IND、DATE_IND 的相同组合的多行、STUDY_SITE 和 Subarea,您可能希望将其改为 GROUP BY
查询。在创建 GROUP BY
时将 ConcatRelated
留在外面,只有在 GROUP BY
正常工作后才将其添加回来。
我想将基于位置、日期和群组编号的群组成员资格汇总到一个以空格作为分隔符的字段中。
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_IND、DATE_IND 的相同组合的多行、STUDY_SITE 和 Subarea,您可能希望将其改为 GROUP BY
查询。在创建 GROUP BY
时将 ConcatRelated
留在外面,只有在 GROUP BY
正常工作后才将其添加回来。