SQL Server에서 행을 열로 바꾸는 것은 테이블 형식으로 저장된 데이터로 작업할 때 일반적인 작업입니다. 전통적으로 이는 시간이 많이 걸리고 비효율적일 수 있는 커서를 사용하여 수행되었습니다. 이 기사에서는 우아하고 성능이 뛰어난 솔루션을 제공하는 대체 행 전치 방법을 살펴봅니다.
한 가지 접근 방식은 COALESCE() 함수를 활용하여 누락을 처리하는 조건부 집계를 사용하는 것입니다. 값.
SELECT TimeSeconds, COALESCE(MAX(CASE WHEN TagID = 'A1' THEN Value END), 'n/a') A1, COALESCE(MAX(CASE WHEN TagID = 'A2' THEN Value END), 'n/a') A2, COALESCE(MAX(CASE WHEN TagID = 'A3' THEN Value END), 'n/a') A3, COALESCE(MAX(CASE WHEN TagID = 'A4' THEN Value END), 'n/a') A4 FROM table1 GROUP BY TimeSeconds
이 쿼리는 누락된 자리 표시자 값('n/a')이 포함된 출력을 생성합니다. data.
또 다른 옵션은 동적 열 생성을 허용하는 PIVOT 함수를 사용하는 것입니다.
SELECT TimeSeconds, A1, A2, A3, A4 FROM ( SELECT TimeSeconds, TagID, Value FROM table1 ) s PIVOT ( MAX(Value) FOR TagID IN (A1, A2, A3, A4) ) p
이 접근 방식은 누락된 데이터에 대해 NULL 값이 포함된 출력을 생성합니다. .
열 개수가 고정되어 있지 않아 결정해야 하는 경우 동적으로 동적 SQL을 사용할 수 있습니다.
DECLARE @cols NVARCHAR(MAX), @sql NVARCHAR(MAX) SET @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(TagID) FROM Table1 ORDER BY 1 FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)'),1,1,'') SET @sql = 'SELECT TimeSeconds, ' + @cols + ' FROM ( SELECT TimeSeconds, TagID, Value FROM table1 ) s PIVOT ( MAX(Value) FOR TagID IN (' + @cols + ') ) p' EXECUTE(@sql)
이 쿼리는 테이블의 고유한 TagID 값을 기반으로 동적 PIVOT 문을 구성합니다.
이러한 방법은 행 전치를 위한 효율적이고 사용자 정의 가능한 솔루션을 제공합니다. SQL Server의 열에. 데이터 특성 및 성능 요구 사항에 따라 적절한 접근 방식을 선택하면 데이터 조작 작업을 단순화하고 쿼리 실행 효율성을 높일 수 있습니다.
위 내용은 SQL Server에서 행을 열로 효율적으로 바꾸려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!