Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 连接Microsoft Access查询中一列中的字段_Sql_Ms Access_Concatenation_Ms Access 2010 - Fatal编程技术网

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

Sql 连接Microsoft Access查询中一列中的字段,sql,ms-access,concatenation,ms-access-2010,Sql,Ms Access,Concatenation,Ms Access 2010,我想连接查询中一列中的字段。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 |

我想连接查询中一列中的字段。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编写的串联VBA代码,这样我就可以模仿一个更简单的例子


Zacharey的解决方案可以很好地处理我的测试数据,但是当我尝试将它用于我的真实数据时,它有近200.000条记录和5000个主集群(cluster1),它永远不会停止计算。只有当我极大地减少数据行的数量,只过滤字母表中的一个字母(如A*)时,我才能在2-4小时后得到结果。目前,我开始按每个主集群手动运行它,并将其添加到表中,但似乎效率不高。你知道我怎样才能加快速度吗。我假设创建一个过滤器(大约5000个,每个大约50个数据行)逐个处理每个主集群,然后运行查询,或者创建一个临时表5000次,然后只运行50行查询5000次,这样可以加快处理速度,但我从来没有这样做过。你有一个例子代码,我可以尝试调整,以适应我的需要

SELECT Distinct
    table.Cluster1,
    table.Cluster2,
    ConcatRelated("Reason", "table", "Cluster1=""" & [Cluster1] & """ and Cluster2=""" & [Cluster2] & """") AS Reasons
FROM table;
这对你有用吗?事实上,您确实需要使用Allen Browne提供的ConcatRelated,以下是您的解决方案:

MySQL解决方案 在MySQL中,您可以使用函数
GROUP\u CONCAT
轻松实现这一点。其代码如下所示:

select `Cluster 1`, `Cluster 2`, GROUP_CONCAT(`Reason`) as Reason
from test
group by `Cluster 1`, `Cluster 2`
在这里,您可以访问一个链接,以说明它

如何在Access中使用 在access中,您自然没有这个函数,但正如您在问题中所写的那样,一个名为Allen Browne的人创建了一个自定义函数来实现相同的结果()

在中,您可以在
如何使用该功能
一节中阅读实现该功能的明确方法。您只需添加一个具有所提供函数的模块,编译并使用它

访问中的等效代码 我相信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];

我对MySQL的引用感到有点困惑,这似乎只是“使用Allen Browne函数”的一个简单例子。亲爱的Arnold,非常感谢你的回答和努力。非常感谢。致以最良好的祝愿,迪特尔·扎切利,非常感谢你!它工作得很好!我对你提供给我的解决方案非常满意。顺致敬意,