SQL 행과 열을 쉽게 변환하는 방법
SQL에서는 보다 실용적인 데이터 형식을 얻기 위해 행 및 열 데이터를 변환하는 것이 일반적인 요구 사항입니다. PIVOT 함수는 복잡해 보이지만 실제로는 더 간단한 대안이 있습니다.
UNION ALL, 집계 함수 및 CASE 문 사용
PIVOT 함수를 사용할 수 없는 경우 UNION ALL, 집계 함수 및 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>
정적 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>
동적 PIVOT 방식
알 수 없는 수의 열과 색상의 경우 동적 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에서 열과 행을 쉽게 바꾸는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!