我正在使用 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
请帮助我。
答案 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,'');