프로그래밍 언어/Database

SQL Server에서 여러 행의 텍스트를 단일 텍스트 문자열로 연결하는 방법

Rateye 2021. 6. 13. 21:00
728x90
반응형
질문 : SQL Server에서 여러 행의 텍스트를 단일 텍스트 문자열로 연결하는 방법은 무엇입니까?

세 개의 행이있는 이름을 보유하는 데이터베이스 테이블을 고려하십시오.

Peter Paul Mary 

Peter, Paul, Mary 의 단일 문자열로 바꾸는 쉬운 방법이 있습니까?

답변

SQL Server 2017 또는 Azure를 사용하는 경우 Mathieu Renda 답변을 참조하세요.

일대 다 관계로 두 테이블을 조인하려고 할 때 비슷한 문제가 발생했습니다. XML PATH 메서드가 행의 연결을 매우 쉽게 처리 할 수 있음을 발견했습니다.

STUDENTS 라는 테이블이있는 경우

SubjectID       StudentName
----------      -------------
1               Mary
1               John
1               Sam
2               Alaina
2               Edward

예상 한 결과는 다음과 같습니다.

SubjectID       StudentName
----------      -------------
1               Mary, John, Sam
2               Alaina, Edward

다음 T-SQL .

SELECT Main.SubjectID,
       LEFT(Main.Students,Len(Main.Students)-1) As "Students"
FROM
    (
        SELECT DISTINCT ST2.SubjectID, 
            (
                SELECT ST1.StudentName + ',' AS [text()]
                FROM dbo.Students ST1
                WHERE ST1.SubjectID = ST2.SubjectID
                ORDER BY ST1.SubjectID
                FOR XML PATH ('')
            ) [Students]
        FROM dbo.Students ST2
    ) [Main]

substring 을 사용하여 첫 번째 문자열을 건너 뛰어 하위 쿼리를 수행 할 필요가없는 경우 더 간결한 방식으로 동일한 작업을 수행 할 수 있습니다.

SELECT DISTINCT ST2.SubjectID, 
    SUBSTRING(
        (
            SELECT ','+ST1.StudentName  AS [text()]
            FROM dbo.Students ST1
            WHERE ST1.SubjectID = ST2.SubjectID
            ORDER BY ST1.SubjectID
            FOR XML PATH ('')
        ), 2, 1000) [Students]
FROM dbo.Students ST2
출처 : https://stackoverflow.com/questions/194852/how-to-concatenate-text-from-multiple-rows-into-a-single-text-string-in-sql-serv
728x90
반응형