我需要在当前日期的最后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软件识别。
答案 0 :(得分:3)
在代码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
答案 1 :(得分:0)
作为一种方式,您可以在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
答案 2 :(得分:0)
对于每个日期的数据量相同的情况,这也是一种解决方案,即每个日期的ID相同。如果没有,可能需要添加更多条件来显示左侧的标题。