0

我需要在我们当前日期的过去 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 软件识别。

4

3 回答 3

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
于 2013-02-01T19:08:19.953 回答
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 列上的变量。在报表中,您可以将 Cross-Data 组件用于主数据,将 DataBand 组件用于详细数据。请从以下链接查看图片:http: //imgur.com/Ve03BXU

于 2013-02-05T07:53:57.703 回答
0

这也是针对每个日期的数据量相同(即每个日期的 ID 相同)的情况的解决方案。如果没有,可能必须添加更多条件以在左侧显示标题。

于 2013-02-05T11:08:10.990 回答