如何在sql server中使用透视表编写此查询?

如何在sql server中使用透视表编写此查询?,sql,sql-server,pivot,Sql,Sql Server,Pivot,我正在使用透视表使用下面的查询 我在一个表中有year列和employee 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(Emp

我正在使用透视表使用下面的查询

我在一个表中有year列和employee 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
我能够做到这一点,但我必须在pivot中硬编码2013年、2014年。我能像你一样吗

如果表中所示年份为2011年、2012年,则输出应如下所示

2011   2012

------   -----------

75       150
或者,如果表中的年份为2015年、2014年,则

2015   2014

------   -----------

40      80
关于

是的,您可以使用哪个get列并创建它,如

为了理解

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