복붙노트

[SQL] MS 액세스 쿼리 : 쿼리를 통해 행을 연결

SQL

MS 액세스 쿼리 : 쿼리를 통해 행을 연결

나는 다음과 같은 정보와 MS 액세스에서 테이블이 있다고 가정 :

ColumnA ColumnB
1       abc
1       pqr
1       xyz
2       efg
2       hij
3       asd

내 질문은 내가 처음 열을 기준으로 행 값으로 두 번째 열의 값을 연결할 수있는 방법입니다. 다음과 같이 내가 원하는 쿼리 결과는 다음과 같습니다

ColumnA ColumnB
1       abc, pqr, xyz
2       efg, hij
3       asd

나는 쿼리를 통해이를 달성하고자합니다. 누군가의 도움이 날이를 달성 할 수 있습니까?

해결법

  1. ==============================

    1.당신은 연결을 할 수있는 기능이 필요합니다.

    당신은 연결을 할 수있는 기능이 필요합니다.

    Microsoft Access에서 테이블에 여러 줄을 응축

    예 데이터를 사용하여 :

    Select T.ColumnA
      , GetList("Select ColumnB From Table1 As T1 Where T1.ColumnA = " & [T].[ColumnA],"",", ") AS ColumnBItems
    From Table1 AS T
    Group By T.ColumnA;
    
  2. ==============================

    2.여기에 뛰어난 재 링크는 다음과 같습니다 함수를 호출하여 SQL 내에서이 작업을 수행하는 방법. 지침은 매우 분명 & 그냥 복사 & 붙여 넣기 갈 수 있도록 기능이 당신을 위해 작성되었습니다. VB에 대한 지식과 심지어 사람이 쉽게 구현할 수 있습니다 : 관련 기록에서 연결할 값

    여기에 뛰어난 재 링크는 다음과 같습니다 함수를 호출하여 SQL 내에서이 작업을 수행하는 방법. 지침은 매우 분명 & 그냥 복사 & 붙여 넣기 갈 수 있도록 기능이 당신을 위해 작성되었습니다. VB에 대한 지식과 심지어 사람이 쉽게 구현할 수 있습니다 : 관련 기록에서 연결할 값

  3. ==============================

    3.이 취득하기가 매우 어려울 수 있습니다. 당신이 함수 쿼리와하지를 수행해야합니다 경우에 실행하는 문제는 하나 개의 컬럼에 연결할 수있는 행의 수를 제한합니다. 내가이를 발견 한 것으로 지금까지 유일한 방법은 문 IIF를 통해입니다.

    이 취득하기가 매우 어려울 수 있습니다. 당신이 함수 쿼리와하지를 수행해야합니다 경우에 실행하는 문제는 하나 개의 컬럼에 연결할 수있는 행의 수를 제한합니다. 내가이를 발견 한 것으로 지금까지 유일한 방법은 문 IIF를 통해입니다.

    SELECT 
    test1.ColumnA AS ColumnA, 
    First([test1].[ColumnB]) & IIf(Count([test1].[ColumnB])>1,"," & Last([test1].[ColumnB])) AS ColumnB
    FROM test1
    GROUP BY test1.ColumnA;
    

    보고:

    ColumnA  ColumnB 
    1      abc,xyz 
    2      efg,hij 
    3      asd
    

    이 첫 번째와 마지막을 반환합니다,하지만 난 당신이 기능을 선택 해결할 수있는 작은 일에 확신하지만, 내가 말했듯이 당신은 따라서, 추가 할 각 추가 항목에 대한 문 저번 더 추가해야 한정.

  4. ==============================

    4.표는 그것을 COLUMNA 시퀀스의 고유 한 기본 키를 제공하는 시퀀스 열을 가질 수있다 :

    표는 그것을 COLUMNA 시퀀스의 고유 한 기본 키를 제공하는 시퀀스 열을 가질 수있다 :

    table: t1
    ColumnA sequence ColumnB
    1       1        abc
    1       2        pqr
    1       3        xyz
    2       1        efg
    2       2        hij
    3       1        asd
    

    그리고 크로스 탭이 생성 될 수있다 :

    query: x1
    TRANSFORM Min([columnB] & ", ") AS Expr1
    SELECT t1.columnA
    FROM t1
    GROUP BY t1.columnA
    PIVOT t1.sequence;
    
    columnA 1    2    3
    1       abc, pqr, xyz,
    2       efg, hij,
    3       asd,
    

    그런 다음 최종 쿼리는 열을 결합하고 마지막 쉼표를 제거 할 수 있습니다 :

    SELECT x1.columnA, Left([1] & [2] & [3],Len([1] & [2] & [3])-2) AS columnB FROM x1;
    
    columnA columnB
    1       abc, pqr, xyz
    2       efg, hij
    3       asd
    

    순서대로 작성 자동화하기 위해 다음 VBA 코드를 사용할 수 있습니다 :

    Sub fill_sequence_t1()
      Dim i: i = 1
      Do While DCount("*", "t1", "sequence IS NULL") > 0
        DoCmd.RunSQL "SELECT t1.columnA, Min(t1.columnB) AS columnB_min INTO t2" & _
                     " FROM t1 WHERE t1.sequence IS NULL GROUP BY t1.columnA;"
        DoCmd.RunSQL "UPDATE t1 INNER JOIN t2 ON (t1.columnA = t2.columnA)" & _
                     " AND (t1.columnB = t2.columnB_min) SET t1.sequence=" & i
        CurrentDb.TableDefs.Delete "t2"
        i = i + 1
      Loop
    End Sub
    
  5. from https://stackoverflow.com/questions/5517233/ms-access-query-concatenating-rows-through-a-query by cc-by-sa and MIT license