집 >데이터 베이스 >MySQL 튜토리얼 >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>
참고:
질문에 적용:
특정 검색어를 바꾸려면 다음 수정된 코드를 사용할 수 있습니다.
<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!