MS Access – 扁平化1到多个的连贯字符串[重复]。


我在MS Access数据库中有以下表格。

Family                         Member
-----------                    -----------
ID                             MEM_ID
FAMILY_NAME                    FIRST_NAME
                               FAMILY_ID

数据。

Family
1        Jones
2        Smith


Member
1        John        1
2        Sally        1
3        Suzy        1
4        Billy        2
5        Mary        2
6        Jack        2

我想弄清楚查询的结果是什么。

ID        FAMILY_NAME        FIRST_NAMES
1        Jones                        John, Sally, Suzy
2        Smith                        Billy, Mary, Jack

如果有人能指点我正确的方向,那将是非常感激的。

解决方案:

这在Access中是可以实现的。

首先,你需要创建一个VBA函数,该函数接受FAMILY_ID并返回一个成员的连接列表。

Public Function fFamailyMember(lngID As Long) As String
    On Error GoTo E_Handle
    Dim db As DAO.Database
    Dim rsData As DAO.Recordset
    Dim strSQL  As String
    Set db = DBEngine(0)(0)
    strSQL = "SELECT FIRST_NAME FROM Member " _
        & " WHERE FAMILY_ID=" & lngID _
        & " ORDER BY FIRST_NAME ASC;"
    Set rsData = db.OpenRecordset(strSQL)
    If Not (rsData.BOF And rsData.EOF) Then
        Do
            fFamailyMember = fFamailyMember & rsData!FIRST_NAME & ","
            rsData.MoveNext
        Loop Until rsData.EOF
    End If
    If Right(fFamailyMember, 1) = "," Then fFamailyMember = Left(fFamailyMember, Len(fFamailyMember) - 1)
fExit:
    On Error Resume Next
    rsData.Close
    Set rsData = Nothing
    Set db = Nothing
    Exit Function
E_Handle:
    MsgBox Err.Description & vbCrLf & vbCrLf & "fFamilyMember", vbOKOnly + vbCritical, "Error: " & Err.Number
    Resume fExit
End Function

现在你可以使用这个函数创建一个基于FAMILY表的查询。

SELECT F.ID, F.FAMILY_NAME, fFamailyMember(F.ID) AS FIRST_NAMES
FROM Family AS F

请注意,这个查询是不可更新的, 因为FIRST_NAMES字段并不真正存在。另外,由于查询是重复调用这个函数(而这个函数又是在打开和循环一个记录集),所以在处理时间上会有一些开销。

敬请谅解。

给TA打赏
共{{data.count}}人
人已打赏
未分类

>90%的时间花在'线程.锁'对象的'获取'方法上。

2022-9-13 14:18:37

未分类

我如何授权谷歌应用脚本中的谷歌语音转文本?

2022-9-13 14:18:39

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索