Access里自定义类似MySQL group_concat 的函数

本文介绍了一种在MS Access中实现字段拼接的方法,利用自定义函数fConcatFld可以将同一表中某一字段的不同值按分号分隔进行拼接,特别适用于需要对特定字段值进行汇总的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MySQL里的group_concat很方便,MS-Access里没有。网上找到一个:http://access.mvps.org/access/modules/mdl0008.htm

Concatenate fields in same table Author(s) Dev Ashish (Q) I need to concatenate a field in the format "Value1; Value2; Value3" etc. for each unique value of another field in the same table. How can I do this? (A) Using the fConcatFld function, in the Northwind database, the following query should return a concatenated list of all CustomerIDs if you group by ContactTitle. SELECT ContactTitle, fConcatFld("Customers","ContactTitle","CustomerID","string",[ContactTitle]) AS Customers FROM Customers GROUP BY ContactTitle; '************ Code Start ********** 'This code was originally written by Dev Ashish 'It is not to be altered or distributed, 'except as part of an application. 'You are free to use it in any application, 'provided the copyright notice is left unchanged. ' 'Code Courtesy of 'Dev Ashish ' Function fConcatFld(stTable As String, _ stForFld As String, _ stFldToConcat As String, _ stForFldType As String, _ vForFldVal As Variant) _ As String 'Returns mutiple field values for each unique value 'of another field in a single table 'in a semi-colon separated format. ' 'Usage Examples: ' ?fConcatFld(("Customers","ContactTitle","CustomerID", _ ' "string","Owner") 'Where Customers = The parent Table ' ContactTitle = The field whose values to use for lookups ' CustomerID = Field name to concatenate ' string = DataType of ContactTitle field ' Owner = Value on which to return concatenated CustomerID ' Dim lodb As Database, lors As Recordset Dim lovConcat As Variant, loCriteria As String Dim loSQL As String Const cQ = """" On Error GoTo Err_fConcatFld lovConcat = Null Set lodb = CurrentDb loSQL = "SELECT [" & stFldToConcat & "] FROM [" loSQL = loSQL & stTable & "] WHERE " Select Case stForFldType Case "String": loSQL = loSQL & "[" & stForFld & "] =" & cQ & vForFldVal & cQ Case "Long", "Integer", "Double": 'AutoNumber is Type Long loSQL = loSQL & "[" & stForFld & "] = " & vForFldVal Case Else GoTo Err_fConcatFld End Select Set lors = lodb.OpenRecordset(loSQL, dbOpenSnapshot) 'Are we sure that duplicates exist in stFldToConcat With lors If .RecordCount <> 0 Then 'start concatenating records Do While Not .EOF lovConcat = lovConcat & lors(stFldToConcat) & "; " .MoveNext Loop Else GoTo Exit_fConcatFld End If End With 'That's it... you should have a concatenated string now 'Just Trim the trailing ; fConcatFld = Left(lovConcat, Len(lovConcat) - 2) Exit_fConcatFld: Set lors = Nothing: Set lodb = Nothing Exit Function Err_fConcatFld: MsgBox "Error#: " & Err.Number & vbCrLf & Err.Description Resume Exit_fConcatFld End Function '************ Code End **********

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值