动态列的水平总和
Posted
技术标签:
【中文标题】动态列的水平总和【英文标题】:Horizontal Sum for dynamic columns 【发布时间】:2012-11-18 01:47:24 【问题描述】:我目前正在尝试获取报告的水平总和。当前使用动态查询和数据透视表。下面是我的代码
声明@cols nvarchar(max) 声明 @pvt_cols nvarchar(max) 声明@sqlquery nvarchar(max)
select @cols= Coalesce(@cols+',','')
+ 'Coalesce([' +MonthYR+ '],0) AS [' + MonthDescription +'] '
,@pvt_cols=coalesce(@pvt_cols +',','') +' ['+[MonthYR] +']'
from @Calendar
where CASDT between '20110401' and '20111230' (generates column with month headers)
print @cols
print @pvt_cols
print '--------------------'
Set @sqlquery='Select ProdDesc,'+@cols + ',Total
from (Select ProdDesc,
MonthYr,
NetAmount,
SUM(NetAmount ) over (partition by ProdDesc) as Total
from #Comtempt1
) as dat
pivot(
SUM(NetAmount) for MonthYr in
(' + @pvt_cols + '))pvt'
print @sqlquery
exec sp_executesql @sqlquery
我可以获取总数,但它显示了整个记录的总数,而我只需要根据用户输入的日期获取总数。
【问题讨论】:
【参考方案1】:declare @cols nvarchar(max) declare @pvt_cols nvarchar(max) declare @sqlquery nvarchar(max)
declare @total nvarchar(max)
select @cols= Coalesce(@cols+',','')
+ 'Coalesce([' +MonthYR+ '],0) AS [' + MonthDescription +'] '
,@pvt_cols=coalesce(@pvt_cols +',','') +' ['+[MonthYR] +']'
,@total= Coalesce(@total+'+','') + 'Coalesce([' +MonthYR+ '],0)'
from @Calendar
where CASDT between '20110401' and '20111230' (generates column with month headers)
print @cols
print @pvt_cols
print '--------------------'
Set @sqlquery='Select ProdDesc,'+@cols + ',' + @Total + ' Total
from (Select ProdDesc,
MonthYr,
NetAmount,
SUM(NetAmount ) over (partition by ProdDesc) as Total
from #Comtempt1
) as dat
pivot(
SUM(NetAmount) for MonthYr in
(' + @pvt_cols + '))pvt'
print @sqlquery
exec sp_executesql @sqlquery
【讨论】:
我已经尝试过您的查询,但它只复制了 @cols 中的值,我需要添加一个 Total 列。这是截图i85.photobucket.com/albums/k42/esr0159/sss-1.jpg 那么,屏幕截图中的“总计”列在哪里?print @sqlquery
显示了什么?
我需要添加它,无论如何我现在能够创建一个新查询。呃,您发布的新“@sqlquery”复制了@cols 列中的值。尽管如此,还是感谢您的帮助:)以上是关于动态列的水平总和的主要内容,如果未能解决你的问题,请参考以下文章
使用Javascript的动态gridview的多列的列总和
若依vue实现动态表格,可动态查询条件,控制列的显示隐藏及操作权限