簡介:
在 Microsoft Access 中,可以使用自訂函數將多行資料組合到單行中。此技術在您需要根據公共欄位匯總資料時特別有用。
問題:
假設您在 MS Access 中有一個包含以下資料的表格:
ColumnA | ColumnB |
---|---|
1 | abc |
1 | pqr |
1 | xyz |
2 | efg |
2 | hij |
3 | asd |
您的目標是將第二列 (ColumnB) 中的值連接到第一列 (ColumnA) 中每個唯一行的單行中。所需輸出為:
ColumnA | ColumnB |
---|---|
1 | abc, pqr, xyz |
2 | efg, hij |
3 | asd |
自訂函數解決方案:
為此,您可以在 Access 中定義一個自訂函數來執行連線。以下是逐步指南:
<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>
此函數接受三個參數:
現在,您可以在查詢中使用自訂函數來連接值。將以下 SQL 語句輸入查詢:
<code class="language-sql">SELECT ColumnA, GetList("SELECT ColumnB FROM Table1 WHERE ColumnA = " & [ColumnA]) AS ConcatenatedValues FROM Table1 GROUP BY ColumnA;</code>
此查詢將按 ColumnA 對行進行分組,並使用 GetList() 函數連接每個組中 ColumnB 的值。
查詢的輸出將是一個具有所需結果的表:
ColumnA | ConcatenatedValues |
---|---|
1 | abc, pqr, xyz |
2 | efg, hij |
3 | asd |
此修訂後的答案透過以下方式改進了 VBA 代碼:
If Len(strValueList) > Len(strDelimiter) Then
區塊確保如果 SQL 查詢未傳回任何行,則函數傳回空字串而不是尾隨分隔符號。 這使得該功能更加健壯和高效。 為了清楚起見,範例中的 SQL 查詢也稍微簡化了。
以上是如何使用自訂函數連接 MS Access 查詢中的行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!