【问题标题】: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

我可以获取总数,但它显示了整个记录的总数,而我只需要根据用户输入的日期获取总数。

【问题讨论】:

    标签: sql-server dynamic pivot-table


    【解决方案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 列中的值。尽管如此,还是感谢您的帮助:)
    猜你喜欢
    • 2019-11-16
    • 2013-10-07
    • 2014-10-14
    • 1970-01-01
    • 2016-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-05
    相关资源
    最近更新 更多