是ms-access中的group_concat函数还是类似的东西?
答案 0 :(得分:3)
您应该问自己是否需要通用解决方案(another is by Allen Browne),或者只是为了本目的而需要它。如果你真的只需要这一次,那么就这么简单。
另一方面,当在VBA代码中连接列表时,请利用长期访问大师Trevor Best向我讲授的技巧,并将分隔符粘贴在每个值的开头,然后使用Mid()脱掉它。而不是通过子记录循环内部:
If Len(strOutput) = 0 Then
strOutput = NewValue
Else
strOutput = strOutput & ", " & NewValue
End If
...在循环中使用它:
strOutput = strOutput & ", " & NewValue
...然后当你退出循环时,剥去前导分隔符:
strOutput = Mid(strOutput, 3)
这对整个地方都有影响,并简化了在大量环境中连接的代码。
答案 1 :(得分:2)
我发现Duane Hookum(微软MVP)的this post声称能够做你想做的事。我没有测试过它。
顺便说一句,如果您感兴趣,我就是这样找到的:
首次搜索:group_concat access通过this post this answer引导我the link was broken,但site:http://www.rogersaccesslibrary.com/ concatenate。
然后我在答案试图链接到的内容后再次搜索,并找到它:{{3}}。
答案 2 :(得分:1)
没有。 Access没有GROUP_CONCAT函数。但是,可以创建一个VBA函数,它允许您传递包含SQL语句的字符串并获得相同的功能(不是我推荐它,但它是可能的)。
采用我自己的个人回程机器,这是我在恐龙统治地球时写回的一些代码:
Public Function ListQuery(SQL As String _
, Optional ColumnDelimiter As String = " " _
, Optional RowDelimter As String = vbCrLf) As String
'PURPOSE: to return a combined string from the passed query
'ARGS:
' 1. SQL is a valid Select statement
' 2. ColumnDelimiter is the character(s) that separate each column
' 3. RowDelimiter is the character(s) that separate each row
'RETURN VAL:
'DESIGN NOTES:
Const PROCNAME = "ListQuery"
Const MAXROWS = 100
Const MAXCOLS = 10
Dim oConn As ADODB.Connection
Dim oRS As ADODB.Recordset
Dim oField As ADODB.Field
Dim sRow As cString
Dim sResult As cString
On Error GoTo ProcErr
Set sResult = New cString
Set sRow = New cString
Set oConn = GetADOConn()
sResult.Clear
Do Until oRS.EOF
sRow.Clear
For Each oField In oRS.Fields
With sRow
If .Length > 0 Then
.Append ColumnDelimiter
End If
.Append Nz(oField.Value)
End With
Next oField
sRow.Trim
If sRow.Length > 0 Then
With sResult
.Append sRow
.Append RowDelimter
End With
End If
oRS.MoveNext
Loop
oRS.Close
oConn.Close
With sResult
If .Right(Len(RowDelimter)).Value = RowDelimter Then
.Length = .Length - Len(RowDelimter)
End If
End With
FunctionResult:
ListQuery = sResult.Value
CleanUp:
Set sResult = Nothing
Set sRow = Nothing
Set oField = Nothing
Set oRS = Nothing
Set oConn = Nothing
Exit Function
ProcErr:
' logging code...
Resume CleanUp
End Function
GetADOConn
函数是一个集中函数,用于检索当前数据库连接。 cString
是一个模仿.NET StringBuilder
类行为的类,但是在.NET不是TLD和营销宣传之前很久就编写过了。由于这是在每一行调用,VBA的内置字符串连接将很慢,因此需要类似StringBuilder
类的东西。原始代码(我已经部分修改过了)对可以使用的行数和列数有一个限制,这就是常量的全部内容。
答案 3 :(得分:1)
有一个访问功能可以将多个值组合成一个值(我想是一个自定义聚合。)链接是http://www.rogersaccesslibrary.com/Otherdownload.asp?SampleName='Generic%20Function%20To%20Concatenate%20Child%20Records'
但该网站暂时停止运营。如果你谷歌href,你会发现很多参考和例子。