我需要从我们的当前日期的过去12个月使Stimulsoft报告,我用动态的数据透视表,使这个,原来的表是在图1
然后枢转表是像图2(更大的图像链接这里: http://i.stack.imgur.com/LPCuP.jpg )
在图1中,DACP_Value是在其对应于图2中。注意,培养被设定为PT-BR的时间行(巴西)
以下是在制造SQLFiddle生成透视表中的示例代码
http://www.sqlfiddle.com/#!3/3205a/23
我需要把一个普通表内的头这种动态数据(也可以是一个临时表),所以我可以在我的报表查询使用,并通过Stimulsoft软件识别。
加入INTO YourTable
后SELECT
您的代码:
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,
[MonthNum] = 12 - DATEDIFF(MONTH, DACP_Date, CURRENT_TIMESTAMP)
FROM yourtable
WHERE DATEDIFF(MONTH, DACP_Date, CURRENT_TIMESTAMP) BETWEEN 0 AND 12
)
SELECT DACP_ID' + @Col + '
INTO YourTable --Add this line here
FROM Data
PIVOT
( SUM(DACP_Value)
FOR MonthNum IN ([0], [1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12])
) pvt;'
EXECUTE SP_EXECUTESQL @SQL
作为一种方式,你可以使用Stimulsoft工具的主详细报告。 作为主表,您可以使用该表仅日期:
SELECT CONVERT(DATE, DATEADD(MONTH, DATEDIFF(MONTH, 0, CURRENT_TIMESTAMP) - (12 - Number), 0), 103) AS DT,
CONVERT(VARCHAR(2),MONTH(DATEADD(MONTH, DATEDIFF(MONTH, 0, CURRENT_TIMESTAMP) - (12 - Number), 0))) + CONVERT(VARCHAR(4),YEAR(DATEADD(MONTH, DATEDIFF(MONTH, 0, CURRENT_TIMESTAMP) - (12 - Number), 0))) As MonthYear
FROM Master..spt_values
WHERE Type = 'P'
AND number BETWEEN 0 AND 12
详细表,它的“yourTable”有额外列:
select *, convert(varchar(2),Month(DACP_date)) + convert(varchar(4),Year(DACP_date)) as MonthYear from yourtable
维吾尔上MonthYear列。 在报告中,您可以使用主数据的详细数据的交叉数据部件和组件DataBand。 :请从以下链接看到图像http://imgur.com/Ve03BXU
也这是的情况下的解决方案时,数据的每个日期的量为每个日期相同,即ID是相同的。 如果不是这样,一个可能要添加更多的条件,显示在左侧头部。