动态行转列

用到的关键函数:

pivot() 快速实现行转列

PIVOT(<聚合函数>([聚合列值]) FOR [行转列前的列名] IN([行转列后的列名1],[行转列后的列名2],[行转列后的列名3],…[行转列后的列名N]))
unpivot() 快速实现列传行 【作为扩展,此次不用】

UNPIVOT([转换为行的列值在转换后对应的列名] for [转换为行的列名在转换后对应的列名] in ([转换为行的列1],[转换为行的列2],[转换为行的列3],…[转换为行的列N]))

set @max_tbmonth= (select max(tb_month) from T_energyConsumption where status=2);
set @currentName=@unintName
create table #temp1
(
f_id int primary key identity(1,1),
[f_Name] varchar(200),[地市] varchar(50),
[1月] varchar(50),
[2月] varchar(50),[3月] varchar(50),[4月] varchar(50),
[5月] varchar(50),[6月] varchar(50),[7月] varchar(50),
[8月] varchar(50),[9月] varchar(50),[10月] varchar(50),
[11月] varchar(50),[12月] varchar(50)
);
– 动态获取数据列
set @sql_col =( select stuff( (select ‘,[’+f_monthcn+‘]’ from T_energyConsumptionMonth
for xml path(‘’)) ,1,1,‘’) as titles);

		set @sql_str='insert into #temp1 
		select SuerName as zbm,'''+ cast( @currentName as varchar) +''' as [地市], '+@sql_col+' 
	from (select SuerName,SupplyNum,BB.f_monthcn  from  T_energyConsumptionMonth BB 
	inner join v_NHxh_En_UNPIVOT  AA on  BB.f_id=month(AA.Tb_month)  
	and year(Tb_month)='''+@seleYear+'''
	and UnitName='''+ @currentName+''') tt 
	PIVOT(max(SupplyNum) FOR [f_monthcn] IN('+ @sql_col+')
	) as  ttt1;'
	
print  @sql_str
exec(@sql_str) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值