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;
이 방법은 Vehicles
및 Location
테이블을 직접 조인하고 STRING_AGG
을 사용하여 City
으로 분할된 VehicleID
값을 집계하여 최신 SQL Server 인스턴스에 대한 보다 효율적인 솔루션을 제공합니다. 연결된 도시의 예측 가능한 순서를 위해 WITHIN GROUP (ORDER BY City)
추가에 유의하세요. 이는 선택 사항이지만 일관된 결과를 얻으려면 권장됩니다. 올바른 집계를 보장하려면 GROUP BY
절도 필요합니다.
SQL Server 버전 및 성능 요구 사항에 가장 적합한 방법을 선택하세요. 이전 버전의 경우 사용자 정의 기능이 필요합니다. 최신 버전의 경우 STRING_AGG
가 상당한 성능 이점을 제공합니다.
위 내용은 SQL Server의 하위 쿼리에서 행을 효율적으로 연결하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!