>데이터 베이스 >MySQL 튜토리얼 >SQL에서 다중 열 테이블을 어떻게 전치할 수 있습니까?

SQL에서 다중 열 테이블을 어떻게 전치할 수 있습니까?

Patricia Arquette
Patricia Arquette원래의
2025-01-14 21:01:43556검색

How Can I Transpose a Multi-Column Table in SQL?

SQL Server 다중 목록 전치

테이블 전치란 행을 열로, 열을 행으로 변환하는 것을 의미합니다. 이는 분석이나 프레젠테이션을 위해 데이터를 피벗해야 할 때 특히 유용합니다.

질문:

다음 형식의 여러 열이 포함된 테이블을 전치하려고 합니다.

Day A B
Mon 1 2
Tue 3 4
Wed 5 6
Thu 7 8
Fri 9 0

다음 형식으로 변환하세요:

Value Mon Tue Wed Thu Fri
A 1 3 5 7 9
B 2 4 6 8 0

해결책:

SQL에서 여러 열을 전치하려면 UNPIVOT 및 PIVOT 함수를 함께 사용할 수 있습니다.

1. UNPIVOT:

UNPIVOT 함수는 열을 행으로 변환하여 데이터를 비정규화합니다. 그러면 day, col, value라는 세 개의 열이 있는 새 테이블이 생성됩니다.

<code class="language-sql">select day, col, value
from yourtable
unpivot
(
    value
    for col in (A, B)
) unpiv</code>

2. 핵심:

그런 다음 PIVOT 함수는 날짜 값을 열로 변환하여 데이터를 다시 정규화합니다. 그러면 전치된 테이블이 생성됩니다.

<code class="language-sql">select *
from
(
  select day, col, value
  from yourtable
  unpivot
  (
    value
    for col in (A, B)
  ) unpiv
) src
pivot
(
  max(value)
  for day in (Mon, Tue, Wed, Thu, Fri)
) piv</code>

참고:

  • MAX 집계 함수는 중복 값이 ​​올바르게 처리되도록 하기 위해 PIVOT 쿼리에 사용됩니다.
  • SQL Server 2008 이상의 경우 UNPIVOT 대신 VALUES 구문과 함께 CROSS APPLY를 사용하여 데이터를 되돌릴 수 있습니다.

질문에 적용:

특정 검색어를 바꾸려면 다음 수정된 코드를 사용할 수 있습니다.

<code class="language-sql">select *
from
(
  select LEFT(datename(dw,datetime),3) as DateWeek,
    col, 
    value
  from DataTable 
  cross apply 
  (
    values ('A', ACalls), ('B', BCalls)
  ) c (col, value)
) src
pivot
(
  sum(value)
  for dateweek in (Mon, Tue, Wed, Thu, Fri)
) piv</code>

이렇게 하면 원하는 형식으로 전치된 테이블이 생성됩니다.

위 내용은 SQL에서 다중 열 테이블을 어떻게 전치할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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