mysql替代group_concact,access合拢多行列数据到一行,类似于mysql的group_concact()函数...

(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;

参数说明:

fConcatFld参数说明

stTable As String 表名称

_stForFld As String, 查询的条件字段名称

_stFldToConcat As String, 合并的字段名称

_ stForFldType As String, 合并字段的类型

_vForFldVal As Variant 合并字段的查询条件

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值