2

我有一个数据库格式问题,我试图根据列“A”行连接列“B”行。像这样:

https://docs.google.com/spreadsheet/ccc?key=0Am8J-Fv99YModE5Va3hLSFdnU0RibmQwNVFNelJCWHc

抱歉我不能发图片。我还没有足够的声望点。我最终会得到它们

所以我想在 Excel 或 Access 中解决这个问题。它目前是一个访问数据库,但我可以轻松地将其导出到 Excel。如您所见,我想在 A 列中找到“userid”,并且在有多个 A 列的地方,例如“shawn”,我想组合 shawn 的多个实例并像这样连接属性 num。

即使仍然有 A 列的多个实例,我也可以稍后过滤表的所有唯一实例。我关心的是如何将 B 列与“|”连接起来 如果 A 列有多个实例,则在中间。

这只是我数据的一部分(还有很多),所以我非常感谢您的帮助。

到目前为止,我脑海中的伪代码是:

If( Column A 有多个实例) Then Concatenate(Column B with "#"+ "|" +"#")

我也想知道是否有办法通过分组访问来做到这一点。

无论如何,请帮忙。

4

2 回答 2

0

我相信您可以使用 SQL GROUP BY 函数解决这个问题。至少,这是我在 MySQL 或类似工具中的做法:

SELECT userid, GROUP_CONCAT(propertynum SEPARATOR '|') FROM Names GROUP BY userid

如此堆栈溢出帖子中所述:如何使用 GROUP BY 在 MySQL 中连接字符串?

这是一个关于如何在 MS Access 中使用 SQL 的链接:http ://www.igetit.net/newsletters/Y03_10/SQLInAccess.aspx

不幸的是,MSAccess 中没有 GROUP_CONCAT 函数,但另一篇 SO 帖子解释了一些方法:ms-access 中有 group_concat 函数吗?

于 2012-12-22T17:38:00.000 回答
0

在excel中,我们可以通过vba模块中的自定义函数轻松实现。希望使用 vba(Macros) 对您来说不是问题。

这是可以在 vba 中添加的函数的代码。(按 Alt+F11,这将带您进入可视化编辑器,右键单击项目并添加一个模块。在模块中添加以下代码)

Public Function ConcatenatePipe(ByVal lst As Range, ByVal values As Range, ByVal name As Range) As String
ConcatenatePipe = ""
Dim i As Integer

For i = 1 To lst.Count
    If name.Value = lst.Item(i).Value Then ConcatenatePipe = ConcatenatePipe & "|" & values.Item(i).Value
Next
ConcatenatePipe = Mid(ConcatenatePipe, 2)
End Function

您可以在示例的 F 列中的 excel 中使用此功能。在 F2 中复制以下公式,然后将单元格复制粘贴到 F 列的其余部分。=ConcatenatePipe($A$2:$A$20,$B$2:$B$20,E2)

于 2012-12-22T17:53:57.753 回答