Einleitung:
In Microsoft Access können Sie benutzerdefinierte Funktionen verwenden, um mehrere Datenzeilen in einer einzigen Zeile zu kombinieren. Diese Technik ist besonders nützlich, wenn Sie Daten basierend auf gemeinsamen Feldern zusammenfassen müssen.
Frage:
Angenommen, Sie haben eine Tabelle in MS Access mit den folgenden Daten:
ColumnA | ColumnB |
---|---|
1 | abc |
1 | pqr |
1 | xyz |
2 | efg |
2 | hij |
3 | asd |
Ihr Ziel ist es, die Werte in der zweiten Spalte (SpalteB) für jede eindeutige Zeile in der ersten Spalte (SpalteA) zu einer einzigen Zeile zusammenzuführen. Die gewünschte Ausgabe ist:
ColumnA | ColumnB |
---|---|
1 | abc, pqr, xyz |
2 | efg, hij |
3 | asd |
Benutzerdefinierte Funktionslösung:
Dazu können Sie in Access eine benutzerdefinierte Funktion definieren, um den Join durchzuführen. Hier ist eine Schritt-für-Schritt-Anleitung:
<code class="language-vba">Public Function GetList(strSQL As String, Optional strDelimiter As String = ", ", Optional strValueList As String = "") Dim rs As DAO.Recordset Set rs = CurrentDb.OpenRecordset(strSQL) Do While Not rs.EOF strValueList = strValueList & rs(0) & strDelimiter rs.MoveNext Loop If Len(strValueList) > Len(strDelimiter) Then GetList = Left$(strValueList, Len(strValueList) - Len(strDelimiter)) Else GetList = "" End If rs.Close Set rs = Nothing End Function</code>
Diese Funktion akzeptiert drei Parameter:
Sie können jetzt benutzerdefinierte Funktionen in Abfragen verwenden, um Werte zu verketten. Geben Sie die folgende SQL-Anweisung in die Abfrage ein:
<code class="language-sql">SELECT ColumnA, GetList("SELECT ColumnB FROM Table1 WHERE ColumnA = " & [ColumnA]) AS ConcatenatedValues FROM Table1 GROUP BY ColumnA;</code>
Diese Abfrage gruppiert die Zeilen nach ColumnA und verwendet die Funktion GetList(), um die Werte von ColumnB in jeder Gruppe zu verketten.
Die Ausgabe der Abfrage ist eine Tabelle mit den gewünschten Ergebnissen:
ColumnA | ConcatenatedValues |
---|---|
1 | abc, pqr, xyz |
2 | efg, hij |
3 | asd |
Diese überarbeitete Antwort verbessert den VBA-Code durch:
If Len(strValueList) > Len(strDelimiter) Then
-Block stellt sicher, dass die Funktion eine leere Zeichenfolge anstelle eines abschließenden Trennzeichens zurückgibt, wenn die SQL-Abfrage keine Zeilen zurückgibt.Dadurch wird die Funktion robuster und effizienter. Auch die SQL-Abfrage im Beispiel ist der Übersichtlichkeit halber leicht vereinfacht.
Das obige ist der detaillierte Inhalt vonWie verkette ich Zeilen in MS Access-Abfragen mithilfe einer benutzerdefinierten Funktion?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!