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

SQL Server(T-SQL)에서 열을 행으로 변환하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2025-01-21 19:22:10499검색

How to Convert Columns to Rows in SQL Server (T-SQL)?

SQL Server에서 열을 행으로 변환하는 여러 가지 방법

이 문서에서는 SQL Server 테이블의 열 데이터를 행 데이터로 변환하는 방법을 설명합니다. 테이블 구조가 다음과 같다고 가정합니다.

<code class="language-sql">[ID] [EntityID] [Indicator1] [Indicator2] [Indicator3] ... [Indicator150]</code>

목표는 데이터를 다음 구조로 변환하는 것입니다.

<code class="language-sql">[ID] [EntityId] [IndicatorName] [IndicatorValue]</code>

목표 결과의 예:

<code>1 1 'Indicator1' 'Indicator 1 的值'
2 1 'Indicator2' 'Indicator 2 的值'
3 1 'Indicator3' 'Indicator 3 的值'
4 2 'Indicator1' 'Indicator 1 的值'</code>

해결책:

다음 방법을 사용하면 열에서 행으로 변환할 수 있습니다.

1. UNPIVOT 기능을 사용하세요

UNPIVOT 함수는 효율적으로 열을 행으로 변환합니다.

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

변환에 포함된 열의 데이터 유형이 일치하는지 확인하세요.

2. CROSS APPLY 및 UNION ALL을 사용하세요

또 다른 방법은 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>

3. CROSS APPLY 및 VALUES 사용(최신 버전의 SQL Server에 적용 가능)

최신 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>

4. 동적 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(''), TYPE).value('.', 'NVARCHAR(MAX)'), 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 버전에 따라 다릅니다. 열 수가 적은 경우 처음 세 가지 방법으로 충분합니다. Indicator 열이 많은 테이블의 경우 동적 SQL 방법이 더 효율적입니다. yourtable을 실제 테이블 이름으로 바꾸는 것을 잊지 마세요.

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

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