소개:
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!