Хорошо. Таким образом, нам нужно было получить выход с кодом ниже. Я получил большую часть кода от: Convert Rows to columns using 'Pivot' in SQL Server. Это дает мне динамические имена столбцов за эти годы, а затем подсчитывает события за каждый год. Мне нужно (или, по крайней мере, хотелось бы) для имен столбцов, отформатированных как FY 2014 Total и т. Д., А не только 2014. Таким образом, был создан еще один список имен столбцов, которые будут использоваться в качестве выходных имен. Я подумал, что при создании точки вы должны указывать пользовательские имена для новых столбцов. Я не уверен, что мне нужно делать.SQL Pivot Issue, нужны имена динамических столбцов
DECLARE @colValues as NVARCHAR(MAX),
@colNames as NVARCHAR(MAX),
@query as NVARCHAR(MAX)
--Creates the column names dynamically from the FY results
select @colValues = STUFF((
SELECT ',' + QUOTENAME(FY)
From [dbo].[Table]
Group By FY
Order By FY desc
for xml path(''), TYPE
).value('.', 'NVARCHAR(MAX)'),1,1,'')
select @colNames = STUFF((
SELECT ',' + '[FY ' + Cast(FY as NVARCHAR(4)) + ' Total]'
From [dbo].[Table]
Group By FY
Order By FY desc
for xml path(''), TYPE
).value('.', 'NVARCHAR(MAX)'),1,1,'')
--print(@cols)
--Creates the SQL Query using pivot with the dynamic columns
set @query = '
with temp1 as
(
Select a.EventType,
a.Days_Since_Last_Event,
row_number() over (partition by a.EventType order by a.Days_Since_Last_Event) as ranking
From
(
SELECT EventType
,DATEDIFF(day,EventDate,GETDATE()) AS Days_Since_Last_Event
FROM [dbo].[Table]
) a join
(
SELECT EventType
,DATEDIFF(day,EventDate,GETDATE()) AS Days_Since_Last_Event
FROM [dbo].[Table]
) b on a.EventType = b.EventType and a.Days_Since_Last_Event = b.Days_Since_Last_Event
), temp3 as
(
select EventType,
Days_Since_Last_Event
from temp1
where ranking = 1
), temp2 as
(
Select EventType
,'+ @colNames + '
From
(
Select EventType, FY, 1 as thing
From [dbo].[Table]
) a
Pivot
(
Count(thing)
for FY in (' + @colValues + ')
) b
)
Select t3.*, '+ @colNames +'
From temp3 t3
join temp2 t2 on t3.EventType = t2.EventType'
execute(@query);