使用PIVOT和我的动态列需要使用这些动态列和聚合函数来逐月生成报告-SQL Server 2012

时间:2016-02-18 05:26:57

标签: sql sql-server-2012

我正在使用 SQL SERVER 2012 ,我正在使用以下查询

SELECT Status AS [Status]
    ,[Feb-2016] AS [Current(Feb)]
    ,[Jan-2016]
    ,[Dec-2015]
    ,[Nov-2015]
    ,[Oct-2015]
    ,[Sep-2015]
    ,[Aug-2015]
    ,[Jul-2015]
    ,[Jun-2015]
    ,[May-2015]
    ,[Apr-2015]
    ,[Mar-2015]
    ,[Feb-2015]
INTO #TempTable
FROM (
    SELECT Status
        ,[Count]
        ,[Month]
    FROM CTE2--I'm using this Common Table Expression in the SP
    ) AS [Mnth]
PIVOT(SUM([Count]) FOR [Month] IN (
            [Feb-2016]
            ,[Jan-2016]
            ,[Dec-2015]
            ,[Nov-2015]
            ,[Oct-2015]
            ,[Sep-2015]
            ,[Aug-2015]
            ,[Jul-2015]
            ,[Jun-2015]
            ,[May-2015]
            ,[Apr-2015]
            ,[Mar-2015]
            ,[Feb-2015]
            )) AS [nNamePivot]

对于上述部分,我可以使用动态查询

如果我使用动态查询,如何获取以下部分的输出,我需要使用这些动态列和聚合函数来逐月生成报告。

SELECT *
FROM #TempTable
UNION
SELECT 'Total'
    ,SUM([Current(Feb)])
    ,SUM([Jan-2016])
    ,SUM([Dec-2015])
    ,SUM([Nov-2015])
    ,SUM([Oct-2015])
    ,SUM([Sep-2015])
    ,SUM([Aug-2015])
    ,SUM([Jul-2015])
    ,SUM([Jun-2015])
    ,SUM([May-2015])
    ,SUM([Apr-2015])
    ,SUM([Mar-2015])
    ,SUM([Feb-2015])
FROM #TempTable

请帮助我。

1 个答案:

答案 0 :(得分:0)

可以为聚合创建另一个动态字符串,方法与为列名创建一个相同。例如,列名称的字符串将如下所示:

[Jan-2015], [Feb-2015], [Mar-2015], [Apr-2015]  

,聚合的字符串如下所示:

SUM([Jan-2015]), SUM([Feb-2015]), SUM([Mar-2015]), SUM([Apr-2015])

创建列名的动态字符串:

STUFF((SELECT ',['+col_name+']' FROM table FOR XML PATH('')),1,1,'');

并为聚合创建字符串:

STUFF((SELECT ',SUM(['+col_name+'])' FROM table FOR XML PATH('')),1,1,'');