>데이터 베이스 >MySQL 튜토리얼 >SQL Server의 GROUP BY 절 내에서 문자열을 효율적으로 연결하려면 어떻게 해야 합니까?

SQL Server의 GROUP BY 절 내에서 문자열을 효율적으로 연결하려면 어떻게 해야 합니까?

Linda Hamilton
Linda Hamilton원래의
2025-01-25 02:17:08379검색

How Can I Efficiently Concatenate Strings within SQL Server's GROUP BY Clause?

SQL Server의 GROUP BY 절 내에서 문자열 연결 간소화

이 가이드에서는 커서나 루프와 같은 덜 효율적인 기술을 사용하지 않고 SQL Server의 GROUP BY 절 내에서 문자열을 연결하는 간결한 방법을 보여줍니다. 목표는 다음과 같이 데이터를 변환하는 것입니다.

<code class="language-sql">id | Name | Value
---|-----|------
1  | A    | 4
1  | B    | 8
2  | C    | 9</code>

다음 형식으로 변환:

<code class="language-sql">id | Column
---|-------
1  | A:4, B:8
2  | C:9</code>

이 솔루션은 FOR XML PATHSTUFF의 강력한 조합을 활용합니다. 이 접근 방식은 효율적이며 SQL Server 2005 이상 버전에서 작동합니다.

SQL 쿼리는 다음과 같습니다.

<code class="language-sql">CREATE TABLE #YourTable ([ID] INT, [Name] CHAR(1), [Value] INT);

INSERT INTO #YourTable ([ID],[Name],[Value]) VALUES (1,'A',4);
INSERT INTO #YourTable ([ID],[Name],[Value]) VALUES (1,'B',8);
INSERT INTO #YourTable ([ID],[Name],[Value]) VALUES (2,'C',9);

SELECT 
  [ID],
  STUFF((
    SELECT ', ' + [Name] + ':' + CAST([Value] AS VARCHAR(MAX)) 
    FROM #YourTable 
    WHERE (ID = Results.ID) 
    FOR XML PATH(''), TYPE
  ).value('(./text())[1]', 'VARCHAR(MAX)'), 1, 2, '') AS NameValues
FROM #YourTable Results
GROUP BY ID;

DROP TABLE #YourTable;</code>

내부 SELECT 문은 FOR XML PATH('')을 사용하여 연결된 문자열을 구성하고, XML 표현을 생성한 다음 .value()을 사용하여 다시 문자열로 변환합니다. STUFF 함수는 초기 쉼표와 공백을 우아하게 제거합니다. 이 방법은 반복적 접근 방식의 성능 오버헤드를 방지합니다.

위 내용은 SQL Server의 GROUP BY 절 내에서 문자열을 효율적으로 연결하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.