用到的关键函数:
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)