SQL Server에서 행을 열로 바꾸기
SQL Server에서는 다양한 방법을 통해 행을 열로 바꿀 수 있습니다. 커서를 사용하여 행을 읽고 열을 채우는 것 외에도 이 변환을 위한 대체 접근 방식이 있습니다.
한 가지 효과적인 방법은 조건부 집계입니다. CASE 문과 함께 MAX() 함수를 활용하면 다음 쿼리에서 볼 수 있듯이 태그 ID를 기반으로 특정 열에 값을 할당할 수 있습니다.
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
또는 null 값을 허용하여 쿼리를 단순화할 수 있습니다. 'n/a' 대신:
SELECT TimeSeconds, MAX(CASE WHEN TagID = 'A1' THEN Value END) A1, MAX(CASE WHEN TagID = 'A2' THEN Value END) A2, MAX(CASE WHEN TagID = 'A3' THEN Value END) A3, MAX(CASE WHEN TagID = 'A4' THEN Value END) A4 FROM table1 GROUP BY TimeSeconds
또 다른 방법은 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
태그 ID 값이 동적인 경우 동적 SQL을 사용하여 필요한 쿼리를 생성할 수 있습니다. STUFF() 및 FOR XML PATH() 함수를 활용하면 열 목록을 동적으로 작성하고 PIVOT 쿼리에서 사용할 수 있습니다.
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)
이러한 방법은 SQL에서 행을 열로 바꾸는 효율적인 방법을 제공합니다. 태그 ID 값의 가용성과 특성을 기반으로 다양한 시나리오에 맞는 서버입니다.
위 내용은 SQL Server에서 행을 열로 바꾸는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!