2013-02-01 87 views
0

我需要從我們的當前日期的過去12個月使Stimulsoft報告,我用動態的數據透視表,使這個,原來的表是在圖1如何從動態數據透視表分配普通表格?

Original table data

然後透視表像圖2(更大的圖像鏈接這裏:http://i.stack.imgur.com/LPCuP.jpg

pivot table

的DACP_Value在圖1中是在其對應於圖2中。注意,培養被設定爲PT-BR的時間行(巴西)

以下是在SQLFiddle

http://www.sqlfiddle.com/#!3/3205a/23

我需要把與正常表內的標題這種動態數據進行的生成數據透視表中的示例代碼(它可以是一個臨時表)所以我可以在我的報告查詢中使用它,並被Stimulsoft軟件識別。

回答

3

SELECT您的代碼後添加INTO YourTable

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 
+0

使用INTO YourTable,可以將數據存入該表(不是臨時表)。然後,您可以在Stimulsoft中使用該表。我可能只是建議在運行之前刪除該表。這裏是小提琴:http://www.sqlfiddle.com/#!3/3205a/34 – sgeddes

+0

感謝拉馬克,但我想要做的是將@SQL變量放入臨時表,以便我可以映射所有從動態sql列到stimulsoft使報告 – crawletas

+0

我需要在stimulsoft中選擇列,它不能用存儲過程完成 – crawletas

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」有額外列:在MonthYear列

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

維吾爾語。 在報告中,您可以使用主數據的交叉數據組件和詳細數據的數據組件。 請從以下鏈接查看該圖像: http://imgur.com/Ve03BXU

+0

可以請你上傳這個.mrt的圖片嗎? – crawletas

+0

請檢查以下鏈接中的文件:https://docs.google.com/folder/d/0Bx_--XLaflQ7LVp5NlhiUWhiSU0/edit?usp=sharing – Aleksey

0

而且這是對的情況下的解決方案時,數據的每個日期的量爲每個日期相同,即ID是相同的。否則,可能需要添加更多條件才能在左側顯示標題。

+0

每個日期的Id是一樣的,謝謝,等待示例文件,我認爲這是比使用sql本身更好的解決方案 – crawletas