복붙노트

[SQL] 어떻게 SQL에서 같은 ID로 여러 행을 연결하는?

SQL

어떻게 SQL에서 같은 ID로 여러 행을 연결하는?

내 표는 두 개의 필드와 같은 세부 사항을 포함 :

ID      DisplayName
1        Editor
1        Reviewer
7        EIC
7        Editor
7        Reviewer
7        Editor
19       EIC
19       Editor
19       Reviewer

나는 표시 이름과 고유 정보를 얻을 원하는처럼

1 편집기 Revi 물병 7 EIC, 편집기 Revi 물병

ID 7 중복 값을하지 마세요

어떻게 표시 이름 정보를 결합하는 방법? 어떻게 쿼리를 작성하는?

해결법

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

    1.SQL-서버에서는 다음에 그것을 할 수 있습니다 :

    SQL-서버에서는 다음에 그것을 할 수 있습니다 :

    질문

    SELECT id, displayname = 
        STUFF((SELECT DISTINCT ', ' + displayname
               FROM #t b 
               WHERE b.id = a.id 
              FOR XML PATH('')), 1, 2, '')
    FROM #t a
    GROUP BY id
    

    TEST DATA

    create table #t 
    (
    id int,
    displayname nvarchar(max)
    )
    
    insert into #t values    
     (1 ,'Editor')
    ,(1 ,'Reviewer')
    ,(7 ,'EIC')
    ,(7 ,'Editor')
    ,(7 ,'Reviewer')
    ,(7 ,'Editor')
    ,(19,'EIC')
    ,(19,'Editor')
    ,(19,'Reviewer')
    

    산출

    id  displayname
    1   Editor, Reviewer
    7   Editor, EIC, Reviewer
    19  Editor, EIC, Reviewer
    
  2. ==============================

    2.

    DECLARE @t TABLE
    (
        ID INT,
        DisplayName VARCHAR(50)
    )
    INSERT INTO @t (ID, DisplayName)
    VALUES
        (1 , 'Editor'),
        (1 , 'Reviewer'),
        (7 , 'EIC'),
        (7 , 'Editor'),
        (7 , 'Reviewer'),
        (7 , 'Editor'),
        (19, 'EIC'),
        (19, 'Editor'),
        (19, 'Reviewer')
    
    SELECT *, STUFF((
                SELECT DISTINCT ', ' + DisplayName
                FROM @t
                WHERE ID = t.ID
                FOR XML PATH('')), 1, 2, '')
    FROM (
        SELECT DISTINCT ID
        FROM @t
    ) t
    

    출력 -

    ----------- ------------------------
    1           Editor, Reviewer
    7           Editor, EIC, Reviewer
    19          Editor, EIC, Reviewer
    

    문자열의 집합에 대한 내 게시물 :

    http://www.codeproject.com/Articles/691102/String-Aggregation-in-the-World-of-SQL-Server

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

    3.MySQL의 경우 : TABLENAME GROUP BY ID와 SELECT ID, GROUP_CONCAT (표시 이름)

    MySQL의 경우 : TABLENAME GROUP BY ID와 SELECT ID, GROUP_CONCAT (표시 이름)

    참조 : http://www.sqlines.com/mysql/functions/group_concat

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

    4.및 Oracle 데이터베이스의 경우

    및 Oracle 데이터베이스의 경우

    select id, 
           listagg(displayname, ',') within group (order by displayname) as names
    from test
    group by id 
    
  5. ==============================

    5.모두 감사합니다,

    모두 감사합니다,

    SELECT Distinct
        t1.ID,
        MAX(STUFF(t2.x_id,1,1,'')) AS DisplayName
    FROM Table t1
    CROSS apply(
        SELECT Distinct ', ' + SUBSTRING(t2.DisplayName,1,2)
        FROM Table t2
        WHERE t2.ID = t1.ID AND t2.DisplayName > ''
        FOR xml PATH('')
    ) AS t2 (x_id)
    GROUP BY
        t1.ID
    order by 1
    GO
    
  6. from https://stackoverflow.com/questions/35172956/how-to-concatenate-many-rows-with-same-id-in-sql by cc-by-sa and MIT license