> 데이터 베이스 > MySQL 튜토리얼 > SQL Server의 하위 쿼리에서 행을 효율적으로 연결하려면 어떻게 해야 합니까?

SQL Server의 하위 쿼리에서 행을 효율적으로 연결하려면 어떻게 해야 합니까?

Linda Hamilton
풀어 주다: 2025-01-22 00:15:10
원래의
842명이 탐색했습니다.

How Can I Efficiently Concatenate Rows from a Subquery in SQL Server?

SQL Server 행 연결: 사용자 정의 기능과 최신 접근 방식

이 문서에서는 SQL Server 내 하위 쿼리의 행을 효율적으로 연결하여 단일 구분 문자열을 생성하는 두 가지 방법을 보여줍니다. 첫 번째는 다양한 SQL Server 버전에 걸쳐 호환성을 제공하는 사용자 지정 함수를 사용합니다. 두 번째는 SQL Server 2017 이상에서 사용할 수 있는 STRING_AGG 기능을 활용하여 향상된 성능을 제공합니다.

방법 1: JoinRows 사용자 정의 함수

더 넓은 SQL Server 버전 호환성을 위해 사용자 정의 기능이 깔끔한 솔루션을 제공합니다. 아래 JoinRows 함수는 구분 문자와 테이블을 입력으로 사용하여 연결된 문자열을 반환합니다.

CREATE FUNCTION JoinRows (
    @Separator CHAR(1),
    @InputTable TABLE (ID INT, Value VARCHAR(MAX))
)
RETURNS VARCHAR(MAX)
BEGIN
    RETURN (
        SELECT COALESCE(@Separator + I.Value, I.Value)
        FROM @InputTable AS I
        FOR XML PATH('')
    );
END;
로그인 후 복사

이 기능은 다음과 같이 쿼리에 통합될 수 있습니다.

SELECT
    VehicleID,
    Name,
    JoinRows(', ', (SELECT City FROM Location WHERE VehicleID = Vehicles.VehicleID)) AS Locations
FROM Vehicles;
로그인 후 복사

방법 2: STRING_AGG(SQL Server 2017 이상)

SQL Server 2017 및 후속 버전의 경우 내장된 STRING_AGG 기능이 더욱 간편하고 빠른 접근 방식을 제공합니다.

SELECT
    VehicleID,
    Name,
    STRING_AGG(City, ', ') WITHIN GROUP (ORDER BY City) AS Locations
FROM Vehicles
INNER JOIN Location ON Vehicles.VehicleID = Location.VehicleID
GROUP BY VehicleID, Name;
로그인 후 복사

이 방법은 VehiclesLocation 테이블을 직접 조인하고 STRING_AGG을 사용하여 City으로 분할된 VehicleID 값을 집계하여 최신 SQL Server 인스턴스에 대한 보다 효율적인 솔루션을 제공합니다. 연결된 도시의 예측 가능한 순서를 위해 WITHIN GROUP (ORDER BY City) 추가에 유의하세요. 이는 선택 사항이지만 일관된 결과를 얻으려면 권장됩니다. 올바른 집계를 보장하려면 GROUP BY 절도 필요합니다.

SQL Server 버전 및 성능 요구 사항에 가장 적합한 방법을 선택하세요. 이전 버전의 경우 사용자 정의 기능이 필요합니다. 최신 버전의 경우 STRING_AGG가 상당한 성능 이점을 제공합니다.

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

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿