집 >데이터 베이스 >MySQL 튜토리얼 >SQL Server의 여러 열에 대해 동적 피벗을 수행하는 방법은 무엇입니까?
SQL Server의 여러 열에 대한 동적 피벗
문제:
SQL Server에서, 열 이름이 변경될 수 있는 테이블의 여러 열에 대해 어떻게 동적 피벗을 수행할 수 있습니까? 미래?
해결책:
여러 열로 동적 피벗을 수행하려면 다음 단계를 따르세요.
1. 데이터 피벗 해제:
select id, col = cast(t_year as varchar(4))+'_'+t_type+'_'+col, value from ATM_TRANSACTIONS t cross apply ( select 'total', total union all select 'volume', volume ) c (col, value);
2. PIVOT 함수 적용:
select ID, [2008_A_total], [2008_A_volume], [2008_B_total], [2008_B_volume], [2008_C_total], [2008_C_volume], [2009_A_total], [2009_A_volume] from ( select id, col = cast(t_year as varchar(4))+'_'+t_type+'_'+col, value from ATM_TRANSACTIONS t cross apply ( select 'total', total union all select 'volume', volume ) c (col, value) ) d pivot ( max(value) for col in ([2008_A_total], [2008_A_volume], [2008_B_total], [2008_B_volume], [2008_C_total], [2008_C_volume], [2009_A_total], [2009_A_volume]) ) piv;
3. 동적 SQL로 변환:
DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX) select @cols = STUFF((SELECT ',' + QUOTENAME(cast(t_year as varchar(4))+'_'+t_type+'_'+col) from ATM_TRANSACTIONS t cross apply ( select 'total', 1 union all select 'volume', 2 ) c (col, so) group by col, so, T_TYPE, T_YEAR order by T_YEAR, T_TYPE, so FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') set @query = 'SELECT id,' + @cols + ' from ( select id, col = cast(t_year as varchar(4))+''_''+t_type+''_''+col, value from ATM_TRANSACTIONS t cross apply ( select ''total'', total union all select ''volume'', volume ) c (col, value) ) x pivot ( max(value) for col in (' + @cols + ') ) p ' execute sp_executesql @query;
출력:
이렇게 하면 지정된 열로 피벗된 결과가 생성됩니다. 테이블의 데이터에 따라 결과가 달라질 수 있습니다.
위 내용은 SQL Server의 여러 열에 대해 동적 피벗을 수행하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!