>데이터 베이스 >MySQL 튜토리얼 >SQL Server에서 열을 행으로 효율적으로 변환하는 방법은 무엇입니까?

SQL Server에서 열을 행으로 효율적으로 변환하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2025-01-21 19:32:09994검색

How to Efficiently Convert Columns to Rows in SQL Server?

SQL Server: 열을 행으로 변환

SQL Server에서는 여러 표시기 열이 포함된 테이블을 각 표시기 및 해당 값에 대한 행 구조로 변환해야 할 수 있습니다. 이는 여러 기술을 통해 달성될 수 있습니다.

UNPIVOT 기능

UNPIVOT 함수는 열을 행으로 변환하는 간단한 방법입니다. 지정된 열을 행으로 변환합니다. 원래 열 이름은 "indicatorname"이라는 레이블이 붙은 새 행이 됩니다. 원래 열의 값은 "indicatorvalue"라는 레이블이 붙은 행이 됩니다.

<code class="language-sql">SELECT id, entityId,
  indicatorname,
  indicatorvalue
FROM yourtable
UNPIVOT
(
  indicatorvalue
  FOR indicatorname IN (Indicator1, Indicator2, Indicator3)
) unpiv;</code>

UNION ALL의 CROSS APPLY를 활용하세요

또 다른 방법은 CROSS APPLY를 UNION ALL과 결합하는 것입니다.

<code class="language-sql">SELECT id, entityid,
  indicatorname,
  indicatorvalue
FROM yourtable
CROSS APPLY
(
  SELECT 'Indicator1', Indicator1 UNION ALL
  SELECT 'Indicator2', Indicator2 UNION ALL
  SELECT 'Indicator3', Indicator3 UNION ALL
  SELECT 'Indicator4', Indicator4 
) c (indicatorname, indicatorvalue);</code>

VALUES 절을 사용한 CROSS APPLY

SQL Server 버전에서 지원하는 경우 CROSS APPLY와 함께 VALUES 절을 활용할 수도 있습니다.

<code class="language-sql">SELECT id, entityid,
  indicatorname,
  indicatorvalue
FROM yourtable
CROSS APPLY
(
  VALUES
  ('Indicator1', Indicator1),
  ('Indicator2', Indicator2),
  ('Indicator3', Indicator3),
  ('Indicator4', Indicator4)
) c (indicatorname, indicatorvalue);</code>

동적 SQL

지표 열이 많은 테이블의 경우 필요한 SQL 문을 수동으로 생성하는 것은 지루할 수 있습니다. 동적 SQL은 이 프로세스를 자동화할 수 있습니다.

<code class="language-sql">DECLARE @colsUnpivot AS NVARCHAR(MAX),
   @query  AS NVARCHAR(MAX)

SELECT @colsUnpivot 
  = STUFF((SELECT ',' + QUOTENAME(C.column_name)
           FROM INFORMATION_SCHEMA.COLUMNS AS C
           WHERE C.table_name = 'yourtable' AND
                 C.column_name LIKE 'Indicator%'
           FOR XML PATH('')), 1, 1, '')

SET @query 
  = 'SELECT id, entityId,
        indicatorname,
        indicatorvalue
     FROM yourtable
     UNPIVOT
     (
        indicatorvalue
        FOR indicatorname IN (' + @colsunpivot +')
     ) u'

EXEC sp_executesql @query;</code>

이러한 기술은 SQL Server에서 열을 행으로 변환하는 유연한 방법을 제공하고 다양한 테이블 구조와 데이터 요구 사항에 적응할 수 있습니다.

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

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