连接Microsoft Access查询中一列的字段

问题描述 投票:0回答:2

我想在查询中连接一列中的字段。我在Microsoft Access中的表如下所示:

| Cluster1  |  Cluster2  |  Reason   |
|-----------|------------|-----------|
| Cluster A | Cluster A1 | Reason 1  |
| Cluster A | Cluster A1 | Reason 2  |
| Cluster A | Cluster A2 | Reason 3  |
| Cluster A | Cluster A2 | Reason 4  |
| Cluster B | Cluster B1 | Reason 5  |
| Cluster B | Cluster B1 | Reason 6  |
| Cluster B | Cluster B1 | Reason 7  |
| Cluster B | Cluster B1 | Reason 8  |
| Cluster B | Cluster B1 | Reason 9  |
| Cluster B | Cluster B2 | Reason 10 |

我想在查询中实现的结果应如下所示:

| Cluster1  |  Cluster2  |                   Reason                     |
|-----------|------------|----------------------------------------------|
| Cluster A | Cluster A1 | Reason1,Reason 2                             |
| Cluster A | Cluster A2 | Reason3,Reason 4                             |
| Cluster B | Cluster B1 | Reason 5,Reason 6,Reason 7,Reason 8,Reason 9 |
| Cluster B | Cluster B2 | Reason 10                                    |

我发现已经有一些类似的问题,但它们更简单,我可能不会根据我的情况调整它们。我了解到我必须使用Allen Browne的Concatenate VBA代码,并且我可以模仿一个更简单的例子。


Zacharey的解决方案非常适用于我的测试数据,但是当我尝试将它与我的真实数据一起使用时,它具有接近200,000条记录和5000主群集(cluster1),它永远不会结束计算。只有当我极度减少数据行的数量时,只过了一个字母的字母(比如A *),我得到2-4小时的结果。目前我开始由每个主群集手动运行它并将其添加到表中,但似乎没有效率。你知道如何加快速度吗?我假设创建一个过滤器(大约5000个,每个大约50个数据行),逐个处理每个主群集,然后运行查询,或创建临时表5000次,然后运行查询5000次,只有50行只会加快处理,但我从来没有这样做过。你有一个我可以尝试根据我的需要调整的示例代码吗?

sql ms-access concatenation ms-access-2010
2个回答
1
投票
SELECT Distinct
    table.Cluster1,
    table.Cluster2,
    ConcatRelated("Reason", "table", "Cluster1=""" & [Cluster1] & """ and Cluster2=""" & [Cluster2] & """") AS Reasons
FROM table;

这对你有用吗?你确实需要使用Allen Browne的ConcatRelated


0
投票

这是你的解决方案:

MySQL Solution

在MySQL中,您可以使用函数GROUP_CONCAT轻松实现此目的。该代码如下所示:

select `Cluster 1`, `Cluster 2`, GROUP_CONCAT(`Reason`) as Reason
from test
group by `Cluster 1`, `Cluster 2`

在这里,您可以访问说明它的fiddle example链接。

How to use in Access

在访问中你没有自然地拥有这个功能,但正如你在你的问题中写的那样,一个名叫Allen Browne的人做了一个自定义函数来实现同样的结果(link)。

link中,您可以在How to use the function部分中阅读明确的方法来实现它。您只需添加具有所提供功能的模块,编译并使用它。

Equivalent Code in Access

我相信MySQL中的代码转换为MS Access中的相同解决方案将是:

SELECT test.[Custer 1], test.[Cluster 2], ConcatRelated("Reason","test", "test.[Custer 1]&test.[Cluster 2] = """ & test.[Custer 1]&test.[Cluster 2] & """") AS Reason
FROM test
GROUP BY test.[Custer 1], test.[Cluster 2];
© www.soinside.com 2019 - 2024. All rights reserved.