数据库访问 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 语句或分组的主要内容,如果未能解决你的问题,请参考以下文章

请问excel查询语句如何写?

应用于数据框的一系列 if 语句

Excel用VBA连接Access数据库查询语句补充

Java 在Excel中创建多级分组折叠或展开分组

Java 在Excel中创建多级分组折叠或展开分组

在 if 语句中格式化多个“或”条件的最佳方法