Pregunta

Estoy en busca de un Acceso de 2007, equivalente a SQL Server se UNEN función.

En SQL Server se podría hacer algo como:

Persona

John
Steve
Richard

SQL

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

PRINT @PersonList

Que produce:Juan, Steve, Richard

Yo quiero hacer lo mismo pero en Access 2007.

¿Alguien sabe cómo combinar filas como esta en Access 2007?

¿Fue útil?

Solución

Aquí está un ejemplo de Función Definida por el Usuario (UDF) y posible uso.

Función:

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

Uso:

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

Un ADO versión, inspirada en un comentario por 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

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

Otros consejos

Creo que Nz es lo que está después, la sintaxis es Nz(variant, [if null value]).Aquí está el enlace para la documentación: Función Nz

---Person--- 
John
Steve
Richard

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

PRINT @PersonList

Aunque Nz hace un comparables cosa a la que se UNEN, no se puede utilizar en el Acceso a hacer la operación que se realiza.No los UNEN que es la construcción de la lista de valores de fila, es el concatenatiion en una variable.

Por desgracia, esto no es posible dentro de una consulta de Access que tiene que ser una única sentencia SQL y donde no hay instalaciones para declarar una variable.

Creo que sería necesario crear una función que abre un conjunto de resultados, iterar sobre ella y concatenar los valores de la fila en una cadena.

Para combinar filas en el Acceso, probablemente necesitarás el código que se ve algo como esto:

Public Function Coalesce(pstrTableName As String, pstrFieldName As String)

Dim rst As DAO.Recordset
Dim str As String

    Set rst = CurrentDb.OpenRecordset(pstrTableName)
    Do While rst.EOF = False
        If Len(str) = 0 Then
            str = rst(pstrFieldName)
        Else
            str = str & "," & rst(pstrFieldName)
        End If
        rst.MoveNext
    Loop

    Coalesce = str

End Function

Usted querrá agregar código de tratamiento de errores y limpiar su conjunto, y esto va a cambiar un poco si se utiliza ADO en lugar de DAO, pero la idea general es la misma.

Entiendo aquí que tiene una tabla "persona" con 3 registros.No hay nada comparable a lo que usted describe en el Acceso.

En "estándar" de Acceso (conjunto de registros), usted tendrá que abrir un conjunto de registros y utilizar el método getrows de sus datos

Dim rs as DAO.recordset, _
    personList as String, _
    personArray() as variant

set rs = currentDb.open("Person")
set personArray = rs.getRows(rs.recordcount)

rs.close

una vez que usted tiene esta matriz (será bidimensional), se puede manipular para extraer la "columna" que usted necesita.Podría ser una manera inteligente para extraer una matriz de dimensión de esto, así que usted puede utilizar el "Join" instrucción para concatenar cada valor de matriz en una cadena.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top