java 动态行转列_动态行转列且一行转多列

这篇博客展示了如何在Java中动态地将数据行转换为列,通过创建临时表并利用Pivot操作来实现一行数据转为多列。内容包括创建测试数据,将订单数据的收货和半价信息分别行转列,并使用动态SQL完成最终转换。
摘要由CSDN通过智能技术生成

if object_id('tempdb..#test') is not null

drop table #test

create table #test

( name nvarchar(200),

orderdate varchar(7),

ordernum int ,

comnum int

)

insert into #test

select 'AAA','2019-01',77,77

union all

select 'AAA','2019-02',66,77

union all

select 'BBB','2019-03',96,86

union all

select 'AAA','2019-04',88,89

union all

select 'BBB','2019-04',120,115

select *from #test

declare @event varchar(3000)='',@sql varchar(3000)='',@queryexp varchar(3000)=''

if object_id('tempdb..#hbTab') is not null

drop table #hbtab

select name,(orderdate+'_shouli') as [year],ordernum,orderdate into #hbtab from #test

select * from #hbtab

--列转行

insert into #hbtab

select name,(orderdate+'_banjie') as [year],comnum,orderdate from #test

select * from #hbtab

--获取行的属性

--select *from #hbtab

select @event=@event+',['+[year]+']' from (select distinct [year] from #hbtab) a order by [year]

print @event

select @queryexp=@queryexp+',max(['+[year]+']) as '+'['+[year]+']' from (select distinct [year] from #hbtab) a order by [year]

print @queryexp

select @queryexp=right(@queryexp,len(@queryexp)-1)

print @queryexp

select @event=right(@event,len(@event)-1)

print @event

--select *from #hbtab order by year

set @sql='select name,'+@queryexp+' from( select name,'+@event +'from #hbtab a

pivot (max(ordernum) for year in('+@event+')

) as pv ) b group by name'

print @sql

exec(@sql)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值