SQL Server 문자열 연결 방법
문제 설명:
여러 줄의 문자열을 한 줄로 모아야 합니다. COALESCE 및 FOR XML은 필요한 작업을 수행하지 않으며 Azure는 CLR 정의 집계 함수를 지원하지 않습니다. 최선의 대안을 찾아야 합니다.
해결책:
표준 Transact SQL을 사용하면 다음 단계에 따라 문자열을 효율적으로 연결할 수 있습니다.
지침:
이 방법은 세 가지 CTE를 사용합니다.
이 솔루션을 사용하려면 그룹화 및 정렬 기준을 지정해야 합니다. 예를 들어 귀하의 경우 동일한 ID를 가진 행이 연결되어 알파벳순으로 정렬됩니다.
예:
다음 데이터를 고려하세요.
<code>ID Name -- -- 1 Matt 1 Rocks 2 Stylus 3 Foo 3 Bar 3 Baz</code>
쿼리와 출력은 다음과 같습니다.
<code class="language-sql">WITH Partitioned AS ( SELECT ID, Name, ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Name) AS NameNumber, COUNT(*) OVER (PARTITION BY ID) AS NameCount FROM dbo.SourceTable ), Concatenated AS ( SELECT ID, CAST(Name AS nvarchar(max)) AS FullName, Name, NameNumber, NameCount FROM Partitioned WHERE NameNumber = 1 UNION ALL SELECT P.ID, CAST(C.FullName + ', ' + P.Name AS nvarchar(max)), P.Name, P.NameNumber, P.NameCount FROM Partitioned AS P INNER JOIN Concatenated AS C ON P.ID = C.ID AND P.NameNumber = C.NameNumber + 1 ) SELECT ID, FullName FROM Concatenated WHERE NameNumber = NameCount;</code>
<code>ID FullName -- ------------------------------ 2 Stylus 3 Bar, Baz, Foo 1 Matt, Rocks</code>
개선 사항 설명: 더 긴 문자열 연결 결과를 지원하려면 nvarchar
유형을 nvarchar(max)
으로 변경하세요. 이렇게 하면 잠재적인 문자열 길이 오버플로 오류를 방지할 수 있습니다.
위 내용은 FOR XML 또는 CLR 함수를 사용하지 않고 SQL Server에서 여러 행의 문자열을 어떻게 효율적으로 연결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!