SQL 计数 + 运行 单列总计

SQL Count + Running Total in a single column

我是 SQL 的新手,所以请多多包涵。 我有一个带有日期列 (Date) 和计数列 (Count)

的 table (DataTable)

我需要创建一个新的 table 来计算:计数,运行 总数,运行 财政年度,运行 12 个月。然后将这些全部添加到一列中,并添加一个新的类别列,用 'month'、'Contract to Date'、'Financial Year' 和“12 个月到结束月”分隔这些总和。

  1. 月份显示该月的计数
  2. 迄今为止的合同就像 运行 从开始日期到结束日期的总数
  3. 财政年度从 6 月开始,就像 运行 总数一样,直到它到达下一年的 5 月,之后即将到来的 6 月将重置其计数
  4. 结束月份的 12 个月将前 11 个月添加到当前月份

结果会是

我如何在单个查询中对这一切进行编程(无需创建 4 个单独的 tables) 我需要使用 SQL Server Management Studio 2008 或 2008r2 据我所知:

SELECT * INTO DataTableFinal FROM (
SELECT Date, Count
FROM DataTable
UNION All
SELECT Date, Count = Sum (Count) OVER (ORDER BY Date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
FROM DataTable
UNION All
SELECT Date, Count =
FROM DataTable
UNION All
SELECT Date, Count =
FROM DataTable
) as tmp

我认为 sql server 2008 不支持 sum() 和 window 中的 order by 功能。尝试这样的事情

SELECT dates,[Count],'MOnth'
FROM   Yourtable
UNION ALL
SELECT dates,run,'Contract to Date'
FROM   Yourtable a
       CROSS apply (SELECT Sum([Count])
                    FROM   Yourtable  b
                    WHERE  a.dates >= b.dates) cs (run) 

SQLFIDDLE DEMO

最终结果:

SELECT dates,[Count],'Month'                    
FROM   Yourtable                    
UNION ALL                   
SELECT dates,cnt,'Contract to Date'                 
FROM   Yourtable a                  
    CROSS apply (SELECT Sum([Count])            
        FROM   Yourtable b
        WHERE  a.dates >= b.dates) cs (cnt)
UNION ALL                   
SELECT dates,cnt,'12 Months to End Date'                    
FROM   Yourtable a                  
    CROSS apply (SELECT Sum([Count])            
    FROM   Yourtable b
    WHERE  a.dates >= b.dates and b.dates >= DATEADD(month, -12, a.dates)) cs (cnt) 
UNION ALL                   
SELECT dates,cnt,'Financial Year'                   
FROM   Yourtable a                  
    CROSS apply (SELECT Sum([Count])            
        FROM   Yourtable b
        WHERE  a.dates >= b.dates and b.dates >= DATEADD(year,DATEDIFF(month,'19100701',a.dates)/12,'19100701')) cs (cnt)