>데이터 베이스 >MySQL 튜토리얼 >SQL Server의 PIVOT 연산자는 어떻게 여러 열의 데이터를 행 기반 형식으로 재구성할 수 있습니까?

SQL Server의 PIVOT 연산자는 어떻게 여러 열의 데이터를 행 기반 형식으로 재구성할 수 있습니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-25 18:36:13614검색

How can SQL Server's PIVOT operator reshape data from multiple columns into a row-oriented format?

SQL Server에서 공개되는 PIVOT의 비밀

데이터가 분석하기 어려운 방식으로 구성되어 있는 데이터 세트를 자주 접하게 됩니다. 의미 있는 형식으로 제시됩니다. 이러한 시나리오 중 하나는 데이터가 여러 열로 구성될 때 발생하며, 각 열은 특정 범주에 대해 서로 다른 값을 나타냅니다. 이러한 데이터세트를 범주가 열이고 값이 행인 테이블로 변환하려면 SQL Server에서 PIVOT 연산자를 사용할 수 있습니다.

"Name1" 열이 있는 "mytable"이라는 테이블이 있는 시나리오를 고려해 보겠습니다. , "이름2" 및 "값"입니다. 이 테이블의 데이터는 다양한 이름("A" 및 "B")과 연관된 다양한 값("P1", "P2", "P3", "P4")을 나타냅니다.

Name1  Name2  Value
A      P1     1
A      P2     1
A      P3     2
B      P1     3
B      P2     1
B      P4     1

우리의 목표 이 데이터를 다음 형식으로 재구성하는 것입니다.

       A     B
P1     1     4
P2     1     1
P3     2     NULL
P4     NULL  1

SQL Server 2005에서는 동적 쿼리 구성을 활용하여 PIVOT을 사용하여 이러한 변환을 수행할 수 있습니다. 단계별 가이드는 다음과 같습니다.

  1. 쉼표로 구분된 열 이름 문자열 조합: 다음 쿼리를 실행하여 모든 고유한 "Name1을 포함하는 문자열을 생성합니다. "로 구분된 값 쉼표:

    DECLARE @cols VARCHAR(1000)
    SELECT  @cols = STUFF(( SELECT distinct  ',' + QuoteName([Name1])
                         FROM myTable FOR XML PATH('') ), 1, 1, '') 
  2. 동적 SQL 쿼리 구성: @sqlquery라는 변수를 생성하고 여기에 다음 쿼리 템플릿을 할당합니다.

    DECLARE @sqlquery VARCHAR(2000)
    SET @sqlquery = 'SELECT * FROM
       (SELECT Name2, Name1, Value
        FROM myTable ) base
        PIVOT (Sum(Value) FOR [Name1]
        IN (' + @cols + ')) AS finalpivot'
  3. 동적 쿼리 실행: 피벗 테이블을 생성하기 위해 EXECEUTE(@sqlquery)를 사용하는 @sqlquery 변수.

이 접근 방식은 "Name1" 열의 고유 값을 기반으로 PIVOT 절을 동적으로 구성합니다. PIVOT 함수는 각 "Name1" 범주에 대한 "값" 열을 합산하고 결과는 "Name2" 값이 행 머리글 역할을 하고 "Name1" 범주가 열 머리글을 형성하는 테이블입니다.

일반적으로 원칙적으로 PIVOT은 열 중심 구조에서 행 중심 구조로 데이터를 변환해야 할 때마다 활용될 수 있습니다. 이 기술을 사용하면 데이터 분석 및 프레젠테이션 작업을 크게 단순화할 수 있습니다.

위 내용은 SQL Server의 PIVOT 연산자는 어떻게 여러 열의 데이터를 행 기반 형식으로 재구성할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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