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

また、これは、各日付のデータ量が同じ、つまり各日付の ID が同じである場合の解決策です。そうでない場合は、左側にヘッダーを表示するための条件を追加する必要がある場合があります。

于 2013-02-05T11:08:10.990 に答える
0

As a way, you can use the master-detail report in Stimulsoft tool. As master table you can use the table with date only:

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

The detail table it's "yourTable" with additional column:

select *, convert(varchar(2),Month(DACP_date)) + convert(varchar(4),Year(DACP_date)) as MonthYear from yourtable

realtion on MonthYear columns. In report you can use the Cross-Data component for master data, and DataBand component for detail data. Please see the image from the following link: http://imgur.com/Ve03BXU

于 2013-02-05T07:53:57.703 に答える