我有一个数据库格式问题,我试图根据列“A”行连接列“B”行。像所以:
https://docs.google.com/spreadsheet/ccc?key=0Am8J-Fv99YModE5Va3hLSFdnU0RibmQwNVFNelJCWHc
抱歉,我无法发布图片。我没有足够的声望点YET。我最终会得到他们
所以我想在Excel或Access中解决这个问题。它目前是一个访问数据库,但我可以轻松地将其导出为excel。正如你所看到的,我想在A列中找到“userid”,并且有多个列A,例如“shawn”,我想将shawn和concatenate属性num的多个实例组合在一起。
即使A列仍有多个实例,我也可以稍后过滤该表的所有唯一实例。我关心的是如何将列B与“|”连接起来如果列A有多个实例,则在中间。
这只是我的数据的一部分(还有很多),所以我非常感谢你的帮助。
到目前为止我头脑中的伪代码是:
如果(A列有多个实例) 然后连接(B列带有“#”+“|”+“#”)
我也想知道是否有办法在分组访问时执行此操作。
好吧无论如何,请帮助。
答案 0 :(得分:0)
我相信你可以用SQL GROUP BY函数来解决这个问题。至少,这是我在MySQL或类似方面的做法:
SELECT userid, GROUP_CONCAT(propertynum SEPARATOR '|') FROM Names GROUP BY userid
如此堆栈溢出帖子中所述:How to use GROUP BY to concatenate strings in MySQL?
以下是有关如何在MS Access中使用SQL的链接:http://www.igetit.net/newsletters/Y03_10/SQLInAccess.aspx
不幸的是,MSAccess中没有GROUP_CONCAT功能,但是这篇SO帖子解释了一些方法:is there a group_concat function in ms-access?
答案 1 :(得分:0)
在excel中,我们可以通过vba模块中的自定义功能轻松实现。希望使用vba(宏)对你来说不是问题。
以下是可以在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中使用。将下面的formulla复制到F2中,然后将单元格粘贴到F列的其余部分。 =ConcatenatePipe($A$2:$A$20,$B$2:$B$20,E2)