mysql concat自定义_Access里自定义类似MySQL group_concat 的函数

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 **********

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2011-09-21 16:32

浏览 413

评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值