我使用数据透视表使用以下查询。
我在一个表中有年份列和员工ID列
Select [2013],[2014],Cast(CONVERT(NUMERIC(18,2),(CONVERT(NUMERIC(18,2),([2014]-[2013]))/CONVERT(NUMERIC(18,2),[2013])*100.00))as Varchar(50))+'%'AS Diff From
(Select [2013],[2014]
from
( Select Year,Count(EmployeeId)Cont from employee group by year) as sourcetable
Pivot ( sum(Cont) for [Year] in ([2013],[2014])) as pivotable )As A
我希望输出如下,即作为列的最后两年并计算为值
2013 2014
------ -----------
50 100
我能够实现这一目标,但我不得不在2013年,2014年进行硬编码。我能动态地像
那样如果表中的年份是2011年,2012年那么输出应该如下
2011 2012
------ -----------
75 150
或表中的年份是2015年,2014年
2015 2014
------ -----------
40 80
此致
答案 0 :(得分:0)
是的,您可以使用dynamic Pivot获取列并创建它,例如
2nd link了解
DECLARE @DynamicPivotQuery AS NVARCHAR(MAX)
DECLARE @ColumnName AS NVARCHAR(MAX)
--Get distinct values of the PIVOT Column
SELECT @ColumnName= ISNULL(@ColumnName + ',','')
+ QUOTENAME(Course)
FROM (SELECT DISTINCT Course FROM #CourseSales) AS Courses
--Prepare the PIVOT query using the dynamic
SET @DynamicPivotQuery =
N'SELECT Year, ' + @ColumnName + '
FROM #CourseSales
PIVOT(SUM(Earning)
FOR Course IN (' + @ColumnName + ')) AS PVTTable'
--Execute the Dynamic Pivot Query
EXEC sp_executesql @DynamicPivotQuery