私はこのクエリを持っています:
DECLARE @Col NVARCHAR(MAX) =
( SELECT ', ' + QUOTENAME(CONVERT(VARCHAR, DATEADD(MONTH, DATEDIFF(MONTH, 0, CURRENT_TIMESTAMP) - (12 - Number), 0), 103)) + ' = [' + CAST(number AS VARCHAR) + ']'
FROM Master..spt_values
WHERE Type = 'P'
AND number BETWEEN 0 AND 12
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
DECLARE @SQL NVARCHAR(MAX) =
N'WITH Data AS
( SELECT DACP_Id, DACP_Value, ResultCenters.RSL_CodDescr AS CentroResultado, Users.USR_EmpName Colaborador, Devices.DEV_NoArea+Devices.DEV_No as AreaNumero,
[MonthNum] = 12 - DATEDIFF(MONTH, DACP_Date, CURRENT_TIMESTAMP)
FROM DevicesAccompaniments INNER JOIN
Devices ON Devices.DEV_Id = DevicesAccompaniments.FK_DEV_Id INNER JOIN
ResultCenters ON ResultCenters.RSL_Id = Devices.DEV_RsltId INNER JOIN
Contracts ON Contracts.CNT_Id = Devices.DEV_ContrId INNER JOIN
Users ON Users.USR_Id = Devices.DEV_UsrId
WHERE DATEDIFF(MONTH, DACP_Date, CURRENT_TIMESTAMP) BETWEEN 0 AND 12
)
SELECT CentroResultado, Colaborador, AreaNumero' + @Col + '
FROM Data
PIVOT
( SUM(DACP_Value)
FOR MonthNum IN ([0], [1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12])
) pvt;'
12 の列と、現在の日付から過去 12 か月に関する追加情報が作成されます。問題は、このクエリをレポートに入れる必要があることですが、var @SQL 内の情報を使用して列を一時テーブルにマップする必要があることです。 「EXEC sp_executesql @SQL;」を実行しています。以下は、現在の日付から過去 12 か月間のフィドルのサンプルです: http://www.sqlfiddle.com/#!3/3205a/14
どんな助けでも大歓迎です、ありがとう。