sql server 行转列

 

/*生成源数据表*/
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 #t

 

/*
 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脚本,生成相关数据
    
--select * from #t
truncate table #t
drop table #t

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值