Tsql 有没有办法在Excel中生成累积数据透视?
我有一些数据: 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 通过这种方式,我可以在这些数据上创建一个堆叠面积图,并显示通道的累积增长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 它产生了
我可以看到一个可能的解决方案是填充源数据,以便所有通道在所有周内都有一行,并且在数据中有一个附加列,即每个通道每周计数的累积。。。然而,这是相当多的额外复杂性 我能够通过几个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
问题是,这真的不是很容易理解,我肯定想知道,当我稍后回来看它时,我是在燃烧什么:-哦,好吧