sql - nonaggregated - groupby laravel
¿Hay una función group_concat en ms-access? (4)
Debería preguntarse si necesita una solución genérica ( otra es de Allen Browne ) o si la necesita solo para el presente propósito. Si realmente solo lo necesita una vez, hágalo de la manera más fácil.
En una nota al margen, al concatenar listas en código VBA, aprovecha un truco que me enseñó el gurú de acceso Trevor Best, y es para poner el delimitador al comienzo de cada valor y luego usar Mid () para quitarlo apagado. En lugar de esto dentro de su ciclo a través de los registros secundarios:
If Len(strOutput) = 0 Then
strOutput = NewValue
Else
strOutput = strOutput & ", " & NewValue
End If
... usa esto dentro del ciclo:
strOutput = strOutput & ", " & NewValue
... y luego, cuando salga del ciclo, quite el delimitador principal:
strOutput = Mid(strOutput, 3)
Esto tiene implicaciones en todo el lugar y simplifica el código para la concatenación en una gran cantidad de contextos.
¿Hay una función group_concat en ms-access o algo similar?
Encontré esta publicación de Duane Hookum (un MVP de Microsoft) que dice que puede hacer lo que quiera. Aunque no lo he probado.
Por cierto, en caso de que esté interesado, así es como lo encontré:
Primera búsqueda: el acceso de group_concat me llevó a esta publicación con esta respuesta, pero el enlace estaba roto .
Luego volví a buscar el contenido que la respuesta intentaba vincular y lo encontré: sitio: http: //www.rogersaccesslibrary.com/ concatenate .
Hay una función de acceso para agrupar varios valores en un valor (un agregado personalizado, supongo). El enlace es http://www.rogersaccesslibrary.com/Otherdownload.asp?SampleName=''Generic%20Function%20To%20Concatenate%20Child%20Records''
pero el sitio está caído por ahora. Si busca en google el href, encontrará muchas referencias y ejemplos.
No. Access no tiene una función GROUP_CONCAT. Sin embargo, es posible crear una función VBA que le permita pasar una cadena que contenga una declaración SQL y obtener la funcionalidad equivalente (no es que lo recomiende, pero sí es posible).
Tomando mi propia máquina personal de retorno, aquí hay un código que escribí cuando los dinosaurios gobernaban la Tierra:
Public Function ListQuery(SQL As String _
, Optional ColumnDelimiter As String = " " _
, Optional RowDelimter As String = vbCrLf) As String
''PURPOSE: to return a combined string from the passed query
''ARGS:
'' 1. SQL is a valid Select statement
'' 2. ColumnDelimiter is the character(s) that separate each column
'' 3. RowDelimiter is the character(s) that separate each row
''RETURN VAL:
''DESIGN NOTES:
Const PROCNAME = "ListQuery"
Const MAXROWS = 100
Const MAXCOLS = 10
Dim oConn As ADODB.Connection
Dim oRS As ADODB.Recordset
Dim oField As ADODB.Field
Dim sRow As cString
Dim sResult As cString
On Error GoTo ProcErr
Set sResult = New cString
Set sRow = New cString
Set oConn = GetADOConn()
sResult.Clear
Do Until oRS.EOF
sRow.Clear
For Each oField In oRS.Fields
With sRow
If .Length > 0 Then
.Append ColumnDelimiter
End If
.Append Nz(oField.Value)
End With
Next oField
sRow.Trim
If sRow.Length > 0 Then
With sResult
.Append sRow
.Append RowDelimter
End With
End If
oRS.MoveNext
Loop
oRS.Close
oConn.Close
With sResult
If .Right(Len(RowDelimter)).Value = RowDelimter Then
.Length = .Length - Len(RowDelimter)
End If
End With
FunctionResult:
ListQuery = sResult.Value
CleanUp:
Set sResult = Nothing
Set sRow = Nothing
Set oField = Nothing
Set oRS = Nothing
Set oConn = Nothing
Exit Function
ProcErr:
'' logging code...
Resume CleanUp
End Function
La función GetADOConn
es una función centralizada para recuperar la conexión de la base de datos actual. cString
es una clase que imita el comportamiento de la clase StringBuilder
de .NET, pero fue escrita mucho antes de que .NET fuera algo más que un TLD y una exageración publicitaria. Como esto se llama en cada fila, la concatenación de cadenas incorporada de VBA será lenta y, por lo tanto, se necesita algo así como una clase StringBuilder
. El código original (que he modificado parcialmente) tenía un límite en el número de filas y columnas que podrían usarse, de lo que se tratan las constantes.