使用 Access 数据库中 Excel 中的 SQL 连接行

Concatenating rows using SQL in Excel from Access Database

我有一个 Excel 2010 电子表格,它从 Access 数据库收集数据,我需要从中获取数据的 table 之一设置如下:

|UniqueID |  PaymentID | ClaimID |  
 1        | 1234       | 5556    |
 2        | 1234       | 5557    |
 3        | 1235       | 5558    |
 4        | 1236       | 5559    |
 5        | 1236       | 5560    |

我需要的是根据 PaymentID 将 ClaimID 连接到同一行,因此它应该看起来像这样:

|UniqueID    |  PaymentID | ClaimID     |  
|   1        | 1234       | 5556, 5557  |
|    2       | 1235       | 5558         
|    3       | 1236       | 5559, 5560  | 

我已经尝试使用 VBA 有效的代码,但是处理时间太长。我已经尝试过 PowerQuery,它也可以工作,但其他公司没有安装它,所以在很长一段时间内都不会工作 运行。我最后的想法是使用连接选项中的 SQL 来操作数据,但我不确定如何操作。我已经搜索并尝试了以下函数:ConcatADO、Concatlist、Stuff 和 Group_Concat 但没有任何运气(也许我用错了它们?)。

其他可能有用的信息:
这个特定 table 上的数据库大约有 40,000 行数据。当我使用 Excel 2010 时,一些用户将使用 Excel 2007、2010、2013 和 2016。

有没有一种方法可以使用 SQL 或我可能没有想到的其他方法来实现基于 PaymentID 的 ClaimsID 行的串联?

提前致谢。

正常情况下 sql 是这样的: SELECT PaymentID , GROUP_CONCAT(ClaimID) GroupedName FROM table_name GROUP BY PaymentID

应该可以工作,在 Postgres 中 SQl 类似于:

SELECT PaymentID , array_agg(ClaimID) FROM table_name GROUP BY PaymentID

应该可以

对于可能遇到此问题的任何其他人,我最终无法获得 SQL 的工作方式,因此我不得不寻求一些不太优雅的方法。

我使用 SQL 拉取了数据,并在 Excel 数据 table 上添加了两个辅助列。在应用公式之前 - 确保数据排列在(以我为例)从低到高的 PaymentID 顺序 - 在第一个助手(名为 "ClaimIDConCat")列中我放置了这个公式:

=IF([@PaymentID]=OFFSET([@PaymentID],-1,0),OFFSET([@ClaimIDConCat],-1,0)&", "&[@ClaimID],[@ClaimID])

这为我提供了一个不断增长的与付款相关的 ID 列表。在第二个帮助列(名为 "FinalRow")中,我使用了这个公式:

=IF([@PaymentID]<>OFFSET([@PaymentID],1,0),"FinalRow","NotFinal")

这将简单地查看下面的行是否与当前行相同 - 如果相同 "NotFinal" 放置在单元格中,如果使用 "FinalRow"。

最后,我的最后一步是使用简单的 INDEX() MATCH() 数组公式将数据拉入另一个 table:

{=IFERROR(INDEX(Tablename[ClaimIDConCat],MATCH(1,([@RelatedID]=ClaimIDData[PaymentID])*("FinalRow"=Tablename[FinalRow]),0)),"N/A")}

这为我提供了整体所需的输出。