使用PIVOT的动态列,我需要将这些动态列与聚合函数一起使用,以便按月生成报告-SQL Server 2012

使用PIVOT的动态列,我需要将这些动态列与聚合函数一起使用,以便按月生成报告-SQL Server 2012,sql,sql-server-2012,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

我使用的是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]
对于上面的部分,我可以使用动态查询

如果我使用动态查询,那么如何获得以下部分的输出,我需要使用这些动态列以及聚合函数来按月生成报告


请帮我解决这个问题。

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

[Jan-2015], [Feb-2015], [Mar-2015], [Apr-2015]  
SUM([Jan-2015]), SUM([Feb-2015]), SUM([Mar-2015]), SUM([Apr-2015])
聚合的字符串如下所示:

[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,'');

您是否尝试过此旋转用例?如果您想要答案,请编辑它,使其更具可读性。@Aditya是的。我试过了。但是它不符合我的要求。你能把数据\截图贴在这里吗?像SELECT*FROM TEMP和所需的数据格式?谢谢兄弟。现在不需要了@哈立德·阿明的主意对我有效。谢谢兄弟。还有更好的办法吗?这是我唯一知道的办法。因为这些列是动态的,所以我们必须应用我需要单独计算的任何动态聚合。如果是从2016年1月到2016年12月,那么应该是sumjan-2016,sumfeb-2016,…,sumdec-2016注意:月份将根据报告参数而变化。是的,STUFF语句将为您提供一个逗号分隔的字符串,其中包含各个列名,您可以在PIVOT函数中使用此字符串。如果列来自参数,则需要在STUFF查询中添加WHERE子句。请注意,手动封闭数据库对象名称不是一种方法。您应该使用该函数正确引用这些对象名称。考虑一个列名称,如Curib[i,t],并注意这种工作失败的方式。