-1
好的。所以我們需要用下面的代碼來獲得輸出。我獲得了大部分代碼:Convert Rows to columns using 'Pivot' in SQL Server。這給了我多年的動態列名稱,然後統計每年的事件。我需要(或至少希望)將列名格式化爲2014財年Total等格式,而不僅僅是2014年。因此創建了另一個列名稱作爲輸出名稱。我認爲,在做數據透視時,你會給新列的自定義名稱。我不知道我需要做什麼。SQL數據透視問題,需要動態列名
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);