明细数据汇总合计(列转行+行列汇总)

原数据
在这里插入图片描述

declare @PivotField varchar(max),@pivotField_sum varchar(max),@count int=0,@sql varchar(max)
select @PivotField = stuff((select ', '+ '[' + asset_classification + ']'  from t_card_registration_of_fixed_assets 
group by asset_classification
order by asset_classification for xml path('') ),1,1,''), 
		@pivotField_sum = stuff((select ', '+ 'sum(isnull([' + asset_classification + '],0)) as [' + asset_classification + ']' 
from t_card_registration_of_fixed_assets
group by asset_classification
order by asset_classification for xml path('') ),1,1,'')

select @count=count(*) from t_card_registration_of_fixed_assets

if @count>0
begin
set @sql='with cte
as
(select asset_classification,class_name, sum(original_value) as original_value from t_card_registration_of_fixed_assets
group by asset_classification,class_name), 
pivot_detail
as
(
SELECT [class_name],'+@PivotField+'
FROM 
cte p
PIVOT
(
sum(original_value)
FOR asset_classification IN
(  '+@PivotField+')
) AS pvt
),
piovt_detail_total
as
(
select dt.*, tot.tot_amount 
from 
(
SELECT [class_name],   '+@PivotField+'
FROM cte p
PIVOT
(
sum(original_value)
FOR asset_classification IN
(  '+@PivotField+')
) AS pvt
) dt left join 
(
select [class_name], sum(original_value) as tot_amount 
	from cte
	group by [class_name]
) tot on dt.[class_name] = tot.[class_name]
)

select [class_name] as 公司名称,'+@PivotField+',tot_amount as 共计 from piovt_detail_total
union all 
select ''总计'' as 公司名称,'+@pivotField_sum+', sum(tot_amount) as tot_amount
from piovt_detail_total'
end
else if @count=0
begin
set @sql='select ''未查询到数据!'' as 提示'
end
print @sql
exec(@sql)

效果如图
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值