腳本: /* 說明:sql server如何通過pivot對數據進行行列轉換(進階),用於員工業績按月龍虎排行榜、客戶銷售金額按月排行榜等 腳本來源:https://www.cnblogs.com/zhang502219048/p/13173228.html 作者:zhang502219048 作者 ...
腳本:
/* 說明:sql server如何通過pivot對數據進行行列轉換(進階),用於員工業績按月龍虎排行榜、客戶銷售金額按月排行榜等 腳本來源:https://www.cnblogs.com/zhang502219048/p/13173228.html 作者:zhang502219048 作者微信公眾號:SQL資料庫編程(微信號zhang502219048) */ declare @n int = 2 create table #t1 ( [月份] nvarchar(50), [業務員] nvarchar(50), [金額] int ) insert into #t1 values(N'2020-01', N'業務員1', N'100') , (N'2020-01', N'業務員2', N'200') , (N'2020-02', N'業務員2', N'300') , (N'2020-02', N'業務員3', N'400') , (N'2020-03', N'業務員4', N'500') , (N'2020-03', N'業務員5', N'600') , (N'2020-04', N'業務員1', N'700') , (N'2020-04', N'業務員3', N'800') --select * from #t1 select [行序號] = row_number() over(partition by [月份] order by [金額] desc) , * into #t2 from #t1 --select * from #t2 create table #t3 ( [列序號] int, [行序號] int, [月份] nvarchar(50), [結果] nvarchar(50), [類型] nvarchar(50) ) insert into #t3 select [列序號] = 1, [行序號], [月份], [結果] = [業務員], [類型] = [月份] + N'-業務員' from #t2 insert into #t3 select [列序號] = 2, [行序號], [月份], [結果] = [金額], [類型] = [月份] + N'-金額' from #t2 --select * from #t3 declare @sqlIn nvarchar(max) = '' select @sqlIn = @sqlIn + case when @sqlIn <> '' then ',' else '' end + '[' + [類型] + ']' from (select distinct [列序號], [月份], [類型] from #t3) a order by [月份], [列序號] --select @sqlIn --行列轉換後的目標數據 declare @sql nvarchar(max) = ' select top ' + cast(@n as nvarchar(10)) + @sqlIn + ' from (select [行序號], [結果], [類型] from #t3) D pivot(max([結果]) for [類型] in (' + @sqlIn + ')) Q order by [行序號] ' exec(@sql) drop table #t1, #t2, #t3
腳本運行結果:
【轉載請註明博文來源:https://www.cnblogs.com/zhang502219048/p/13173228.html】