Tsql 有没有办法在Excel中生成累积数据透视?

Tsql 有没有办法在Excel中生成累积数据透视?,tsql,excel,charts,pivot,Tsql,Excel,Charts,Pivot,我有一些数据: Week Commencing Channel Count ---------------------------------------- 01/05/2011 C1 02 01/05/2011 C3 01 08/05/2011 C2 03 15/05/2011 C1 01 它产生了

我有一些数据:

Week Commencing Channel Count ---------------------------------------- 01/05/2011 C1 02 01/05/2011 C3 01 08/05/2011 C2 03 15/05/2011 C1 01 它产生了这个支点:

Week Commencing C1 C2 C3 ------------------------------------------ 01/05/2011 02 01 08/05/2011 03 15/05/2011 01 但是,我希望这些值是累积的,并且没有任何空格:

Week Commencing C1 C2 C3 ------------------------------------------ 01/05/2011 02 00 01 08/05/2011 02 03 01 15/05/2011 03 03 01 通过这种方式,我可以在这些数据上创建一个堆叠面积图,并显示通道的累积增长


我可以看到一个可能的解决方案是填充源数据,以便所有通道在所有周内都有一行,并且在数据中有一个附加列,即每个通道每周计数的累积。。。然而,这是相当多的额外复杂性

我能够通过几个CTE、一些笛卡尔连接和主数据库中的一个小数字表来实现这一点:

WITH 
TestData AS (
    SELECT  CAST('01 May 2011' AS DATETIME) AS StartDate,'C1' AS Channel, 02 AS COUNT
    UNION
    SELECT  CAST('01 May 2011' AS DATETIME) AS StartDate,'C3' AS Channel, 01 AS COUNT
    UNION
    SELECT  CAST('08 May 2011' AS DATETIME) AS StartDate,'C2' AS Channel, 03 AS COUNT
    UNION
    SELECT  CAST('15 May 2011' AS DATETIME) AS StartDate,'C1' AS Channel, 01 AS COUNT
),

Data_CTE AS (
    SELECT Channel, DATEADD(d, -(DATEPART(dw, startdate)+5), CAST(startdate AS DATE)) WeekCommencing, SUM(Count) AS Count 
    FROM TestData
    GROUP BY DATEADD(d, -(DATEPART(dw, startdate)+5), CAST(startdate AS DATE)), Channel),

Sub_CTE AS (
    SELECT Dates.RefWeek, Channels.Channel, ISNULL((SELECT Count FROM Data_CTE WHERE Channel = Channels.Channel AND WeekCommencing = Dates.RefWeek) , 0) AS [Count]
    FROM
        (SELECT  DATEADD(day, number * 7, (SELECT MIN(WeekCommencing) FROM Data_CTE)) RefWeek
    FROM    ( SELECT DISTINCT
                    number
          FROM      master.dbo.spt_values
          WHERE     name IS NULL
        ) n
    WHERE   
        DATEADD(day, number * 7, (SELECT MIN(WeekCommencing) FROM Data_CTE)) <= (SELECT MAX(WeekCommencing) FROM Data_CTE)) AS Dates, 
        (SELECT DISTINCT Channel FROM Data_CTE) AS Channels)

SELECT 
    RefWeek, Channel, ( SELECT SUM(Count) FROM Sub_CTE WHERE Channel = s.Channel AND RefWeek <= s.RefWeek) 
FROM Sub_CTE s

ORDER BY s.Channel, s.RefWeek
问题是,这真的不是很容易理解,我肯定想知道,当我稍后回来看它时,我是在燃烧什么:-哦,好吧