>데이터 베이스 >MySQL 튜토리얼 >SQL Server에서 행을 열로 바꾸는 방법은 무엇입니까?

SQL Server에서 행을 열로 바꾸는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2025-01-05 02:02:41890검색

How to Transpose Rows to Columns in SQL Server?

SQL Server에서 행을 열로 바꾸는 방법

테이블 형식 데이터로 작업할 때 행을 열로 바꾸는 것은 유용한 변환이 될 수 있습니다. SQL Server에는 특정 요구 사항에 따라 이 작업을 수행하는 여러 가지 접근 방식이 있습니다.

조건부 집계

한 가지 방법은 조건부 집계를 사용하는 것입니다. 이 접근 방식은 열 개수를 미리 알고 있는 경우에 적합합니다. 중첩된 CASE 문을 사용하면 특정 조건에 따라 각 열에 대해 검색할 값을 지정할 수 있습니다. 아래 쿼리는 조건부 집계를 보여줍니다.

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

PIVOT 연산자

또 다른 옵션은 PIVOT 연산자를 사용하는 것입니다. 이 연산자를 사용하면 키 값을 기준으로 행을 열로 회전할 수 있습니다. 다음 쿼리는 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

동적 SQL

열 수가 고정되어 있지 않거나 동적으로 결정되는 경우 동적 SQL을 활용할 수 있습니다. SQL. 이 접근 방식에는 사용 가능한 TagID 값을 기반으로 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)

이러한 기술은 SQL Server에서 행을 열로 바꾸는 다양한 방법을 제공합니다. 가장 적합한 접근 방식은 데이터의 성격과 작업의 특정 요구 사항에 따라 다릅니다.

위 내용은 SQL Server에서 행을 열로 바꾸는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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