组合行/连接行

Nak*_*nch 8 ms-access coalesce ms-access-2007 access-vba

我正在寻找与SQL Server的COALESCE功能等效的Access 2007.

在SQL Server中,您可以执行以下操作:

John
Steve
Richard
Run Code Online (Sandbox Code Playgroud)

SQL

DECLARE @PersonList nvarchar(1024)
SELECT @PersonList = COALESCE(@PersonList + ',','') + Person
FROM PersonTable

PRINT @PersonList
Run Code Online (Sandbox Code Playgroud)

产生:约翰,史蒂夫,理查德

我想在Access 2007中做同样的事情.

有谁知道如何在Access 2007中组合这样的行?

Fio*_*ala 14

这是一个用户定义函数(UDF)示例和可能的用法.

功能:

Function Coalsce(strSQL As String, strDelim, ParamArray NameList() As Variant)
Dim db As Database
Dim rs As DAO.Recordset
Dim strList As String

    Set db = CurrentDb

    If strSQL <> "" Then
        Set rs = db.OpenRecordset(strSQL)

        Do While Not rs.EOF
            strList = strList & strDelim & rs.Fields(0)
            rs.MoveNext
        Loop

        strList = Mid(strList, Len(strDelim))
    Else

        strList = Join(NameList, strDelim)
    End If

    Coalsce = strList

End Function
Run Code Online (Sandbox Code Playgroud)

用法:

SELECT documents.MembersOnly, 
    Coalsce("SELECT FName From Persons WHERE Member=True",":") AS Who, 
    Coalsce("",":","Mary","Joe","Pat?") AS Others
FROM documents;
Run Code Online (Sandbox Code Playgroud)

一个ADO版本,受到onedaywhen评论的启发

Function ConcatADO(strSQL As String, strColDelim, strRowDelim, ParamArray NameList() As Variant)
   Dim rs As New ADODB.Recordset
   Dim strList As String

   On Error GoTo Proc_Err

       If strSQL <> "" Then
           rs.Open strSQL, CurrentProject.Connection
           strList = rs.GetString(, , strColDelim, strRowDelim)
           strList = Mid(strList, 1, Len(strList) - Len(strRowDelim))
       Else
           strList = Join(NameList, strColDelim)
       End If

       ConcatADO = strList

   Exit Function

   Proc_Err:
       ConcatADO = "***" & UCase(Err.Description)
   End Function
Run Code Online (Sandbox Code Playgroud)

来自:http://wiki.lessthandot.com/index.php/Concatenate_a_List_into_a_Single_Field_%28Column%29