SQL 열 및 행 전치: 실용 가이드
SQL에서는 테이블 방향을 세로(열)에서 가로(행)로 또는 그 반대로 변환하는 데이터 전치가 필요한 경우가 많습니다. PIVOT
명령이 존재하지만 번거로울 수 있습니다. 이 가이드에서는 더 간단한 대안을 살펴봅니다.
방법 1: UNION ALL, Aggregate, CASE 문
이 접근 방식은 UNION ALL
을 사용하여 피벗을 해제한 다음 집계 함수(여기서는 SUM
)와 CASE
문을 사용하여 다시 피벗합니다.
<code class="language-sql">select name, sum(case when color = 'Red' then value else 0 end) Red, sum(case when color = 'Green' then value else 0 end) Green, sum(case when color = 'Blue' then value else 0 end) Blue from ( select color, Paul value, 'Paul' name from yourTable union all select color, John value, 'John' name from yourTable union all select color, Tim value, 'Tim' name from yourTable union all select color, Eric value, 'Eric' name from yourTable ) src group by name</code>
방법 2: 정적 UNPIVOT 및 PIVOT
변환할 열 수를 알면 정적 UNPIVOT
및 PIVOT
솔루션이 가능합니다.
<code class="language-sql">select name, [Red], [Green], [Blue] from ( select color, name, value from yourtable unpivot ( value for name in (Paul, John, Tim, Eric) ) unpiv ) src pivot ( sum(value) for color in ([Red], [Green], [Blue]) ) piv</code>
방법 3: 가변 열에 대한 동적 피벗
동적인 수의 열과 색상을 처리할 때 동적 SQL이 다음과 같은 솔루션을 제공합니다.
<code class="language-sql">DECLARE @colsUnpivot AS NVARCHAR(MAX), @query AS NVARCHAR(MAX), @colsPivot as NVARCHAR(MAX) select @colsUnpivot = stuff((select ','+quotename(C.name) from sys.columns as C where C.object_id = object_id('yourtable') and C.name <> 'color' for xml path('')), 1, 1, '') select @colsPivot = STUFF((SELECT ',' + quotename(color) from yourtable t FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') set @query = 'select name, '+@colsPivot+' from ( select color, name, value from yourtable unpivot ( value for name in ('+@colsUnpivot+') ) unpiv ) src pivot ( sum(value) for color in ('+@colsPivot+') ) piv' exec(@query)</code>
이러한 방법은 다양한 데이터 조작 요구 사항에 맞춰 SQL의 데이터 전치에 대한 다양한 접근 방식을 제공합니다.
위 내용은 SQL에서 열과 행을 효율적으로 전치하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!