当前位置:Gxlcms > 数据库问题 > mssql sqlserver 不固定行转列数据(动态列)

mssql sqlserver 不固定行转列数据(动态列)

时间:2021-07-01 10:21:17 帮助过:4人阅读

生成源数据表*/ create table #t (compname varchar(20), cheXi varchar(30), dayInfo int, daySaleValue int) /*生成源数据*/ insert into #t(compname,cheXi,dayInfo,daySaleValue) values(一汽丰田,锐志,1,20) insert into #t(compname,cheXi,dayInfo,daySaleValue) values(一汽丰田,皇冠,1,10) insert into #t(compname,cheXi,dayInfo,daySaleValue) values(一汽丰田,霸道,2,30) insert into #t(compname,cheXi,dayInfo,daySaleValue) values(一汽丰田,锐志,3,40) insert into #t(compname,cheXi,dayInfo,daySaleValue) values(一汽丰田,RAV4,4,60) insert into #t(compname,cheXi,dayInfo,daySaleValue) values(一汽丰田,锐志,5,8) insert into #t(compname,cheXi,dayInfo,daySaleValue) values(一汽丰田,霸道,6,6) insert into #t(compname,cheXi,dayInfo,daySaleValue) values(一汽丰田,RAV4,5,9) insert into #t(compname,cheXi,dayInfo,daySaleValue) values(一汽丰田,RAV4,10,10) /* select * from (select compname,daySaleValue,dayInfo,chexi from #t) as d /*注意事项: pivot所涉及的聚合列 value_column 和 pivot_column 都必须存在 上面的查询表中 */ pivot(sum(daySaleValue) for dayInfo in([1],[2],[3],[4],[5],[6],[7],[8],[9],[10])) t ; */ /*拼接字符串*/ declare @sql varchar(max) set @sql = select * from (select compname,daySaleValue,dayInfo,chexi from #t) as d pivot(sum(daySaleValue) for dayInfo in( ; /*动态组合列名*/ declare @lieMing varchar(7000) ---定义动态生成列名存放变量 declare @i int ,@imax int,@field varchar(60) ---定义临时循环变量 declare @fieldList table(keyId int identity,field varchar(60)) ---定义临时表,存放待生成动态列名的数据 insert into @fieldList(field) select distinct dayInfo from #t ---生成列名数据 -------------循环表生成列名start-------------- set @lieMing =‘‘ set @i=1 select @imax =max(keyId) from @fieldList t while @i <@imax begin select @field =field from @fieldList t where t.keyId=@i if isnull(@field,‘‘) !=‘‘ begin if @lieMing !=‘‘ begin set @lieMing =@lieMing +, end set @lieMing = @lieMing+[+@field+]; end set @i=@i+1 end -------------循环表生成列名end-------------- /*动态组合列*/ set @sql =@sql +@lieMing + )) t ;; ---拼接sql语句 exec (@sql) ---执行sql脚本,生成相关数据 truncate table #t drop table #t

 

 技术图片

mssql sqlserver 不固定行转列数据(动态列)

标签:--   isnull   info   www   mssql   实现   target   hex   UNC   

人气教程排行