数据库访问 excel 格式或 if 语句或分组
Posted
技术标签:
【中文标题】数据库访问 excel 格式或 if 语句或分组【英文标题】:Database access excel formatting or if statement or grouping 【发布时间】:2012-12-22 17:00:50 【问题描述】:我有一个数据库格式问题,我试图根据列“A”行连接列“B”行。像这样:
https://docs.google.com/spreadsheet/ccc?key=0Am8J-Fv99YModE5Va3hLSFdnU0RibmQwNVFNelJCWHc
抱歉,我无法发布图片。我还没有足够的声望点。不过我最终会得到它们的
所以我想在 Excel 或 Access 中解决这个问题。它目前是一个访问数据库,但我可以轻松地将其导出到 Excel。如您所见,我想在 A 列中找到“userid”,并且在有多个 A 列的地方,例如“shawn”,我想组合 shawn 的多个实例并像这样连接属性 num。
即使仍然有 A 列的多个实例,我也可以稍后过滤表的所有唯一实例。我关心的是如何将 B 列与“|”连接起来如果 A 列有多个实例,则在中间。
这只是我数据的一部分(还有很多),非常感谢您的帮助。
目前我脑子里的伪代码是:
如果(A 列有多个实例) 然后连接(B列与“#”+“|”+“#”)
我也想知道是否有办法通过分组访问来做到这一点。
无论如何,请帮忙。
【问题讨论】:
【参考方案1】:在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)
【讨论】:
不幸的是,我不知道如何使用 vba(宏)。我现在真的在查。感谢您的帮助。【参考方案2】:我相信您可以使用 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?
【讨论】:
以上是关于数据库访问 excel 格式或 if 语句或分组的主要内容,如果未能解决你的问题,请参考以下文章