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

时间:2014-06-27 03:39:59

标签: sql sql-server pivot

我使用数据透视表使用以下查询。

我在一个表中有年份列和员工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

此致

1 个答案:

答案 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