#sql #sql-server #pivot
#sql #sql-сервер #сводная
Вопрос:
Я использую приведенный ниже запрос с использованием сводной таблицы.
у меня есть столбец 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
Я могу добиться этого, но мне пришлось жестко закодировать 2013, 2014 в pivot. Могу ли я получить динамически, как
если в таблице указаны годы 2011, 2012, то вывод должен быть таким, как показано ниже
2011 2012
------ -----------
75 150
или, если годы, представленные в таблице, — 2015, 2014, тогда
2015 2014
------ -----------
40 80
С уважением
Ответ №1:
Да, вы можете использовать динамический свод, который получает столбец и создает его, например
2-я ссылка для понимания
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