Ms Access Query:通过查询连接行

reg*_*gie 25 sql ms-access group-by concatenation

假设我在Ms Access中有一个表,其中包含以下信息:

ColumnA ColumnB
1       abc
1       pqr
1       xyz
2       efg
2       hij
3       asd
Run Code Online (Sandbox Code Playgroud)

我的问题是,如何将第二列中的值连接到基于第一列的行值.我想要的查询结果如下:

ColumnA ColumnB
1       abc, pqr, xyz
2       efg, hij
3       asd
Run Code Online (Sandbox Code Playgroud)

我想通过查询来实现这一点.有人能帮助我实现这个目标吗?

Tho*_*mas 24

您需要一个函数来进行连接.

Microsoft Access压缩表中的多行

使用您的数据的示例:

Select T.ColumnA
  , GetList("Select ColumnB From Table1 As T1 Where T1.ColumnA = " & [T].[ColumnA],"",", ") AS ColumnBItems
From Table1 AS T
Group By T.ColumnA;
Run Code Online (Sandbox Code Playgroud)

  • 阅读该链接.您将创建一个函数并在查询中使用该函数.否则就无法做到. (5认同)
  • @reggie - 不.没有办法使用动态数量的子项目. (2认同)

Deb*_*ole 9

这是一个很好的链接:如何通过调用函数从SQL中执行此操作.说明非常清楚,函数是为您编写的,因此您只需复制,粘贴和运行即可.即使是不了解VB的人也可以轻松实现它: 从相关记录中连接值


Pat*_*ick 5

这可能很难获得。如果您必须在查询中而不是在函数中执行此操作,那么您将遇到的问题是可以连接到一列中的行数的限制。到目前为止,我发现实现这一目标的唯一方法是通过 iif 语句。

SELECT 
test1.ColumnA AS ColumnA, 
First([test1].[ColumnB]) & IIf(Count([test1].[ColumnB])>1,"," & Last([test1].[ColumnB])) AS ColumnB
FROM test1
GROUP BY test1.ColumnA;
Run Code Online (Sandbox Code Playgroud)

返回:

ColumnA  ColumnB 
1      abc,xyz 
2      efg,hij 
3      asd
Run Code Online (Sandbox Code Playgroud)

这将只返回第一个和最后一个,但我相信你可以通过一些工作来计算出选择函数,但就像我说的那样,你必须为要添加的每个附加项目添加更多的 iif 语句,因此局限性。