문제

SQL Server의 COALESCE 기능에 해당하는 Access 2007을 찾고 있습니다.

SQL Server에서는 다음과 같은 작업을 수행할 수 있습니다.

사람

John
Steve
Richard

SQL

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

PRINT @PersonList

다음을 생성합니다.존, 스티브, 리차드

저도 똑같이 하고 싶지만 Access 2007에서는요.

Access 2007에서 이와 같은 행을 결합하는 방법을 아는 사람이 있습니까?

도움이 되었습니까?

해결책

다음은 샘플 사용자 정의 함수(UDF)와 가능한 사용법입니다.

기능:

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

용법:

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

onedaywhen의 댓글에서 영감을 받은 ADO 버전

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

에서: http://wiki.lessthhandot.com/index.php/Concatenate_a_List_into_a_Single_Field_%28Column%29

다른 팁

나는 Nz가 당신이 추구하는 것이라고 생각합니다. 구문은 Nz(variant, [if null value]).문서 링크는 다음과 같습니다. Nz 함수

---Person--- 
John
Steve
Richard

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

PRINT @PersonList

Nz는 COALESCE와 유사한 기능을 수행하지만 Access에서 이를 사용하여 수행 중인 작업을 수행할 수는 없습니다.행 값 목록을 작성하는 것은 COALESCE가 아니라 변수에 대한 연결입니다.

안타깝게도 이는 단일 SQL 문이어야 하고 변수를 선언할 수 있는 기능이 없는 Access 쿼리 내에서는 불가능합니다.

결과 집합을 열고, 반복하고, 행 값을 문자열로 연결하는 함수를 만들어야 할 것 같습니다.

Access에서 행을 결합하려면 다음과 같은 코드가 필요할 수 있습니다.

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

오류 처리 코드를 추가하고 레코드 세트를 정리해야 하며 DAO 대신 ADO를 사용하면 약간 변경되지만 일반적인 아이디어는 동일합니다.

여기서는 3개의 레코드가 있는 "person" 테이블이 있다는 것을 이해합니다.Access에서 설명하는 것과 비교할 수 있는 것은 없습니다.

"표준" 액세스(DAO 레코드 세트)에서는 레코드 세트를 열고 getrows 메소드를 사용하여 데이터를 가져와야 합니다.

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

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

rs.close

이 배열(2차원 배열)이 있으면 이를 조작하여 필요한 "열"을 추출할 수 있습니다.여기에서 1차원 배열을 추출하는 현명한 방법이 있을 수 있으므로 "Join" 명령을 사용하여 각 배열 값을 하나의 문자열로 연결할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top