SQL计数+运行总数在单个列中



我对SQL相当陌生,所以请原谅我。我有一个表(DataTable)与日期列(日期)和计数列(计数)

  • 01/01/2015 10
  • 01/02/2015 9
  • 01/03/2015 12
  • 01/04/2015 7
  • 01/05/2015 8
  • 01/06/2015 10
  • 01/07/2015 10
  • 01/08/2015 8
  • 01/09/2015 9
  • 01/10/2015 10
  • 01/11/2015 11
  • 01/12/2015 11

我需要创建一个新的表,计算:计数,运行总数,运行财政年度,运行12个月。然后将这些全部添加到一个列中,并添加一个新的类别列,按"月份"、"合同日期"、"财政年度"one_answers"12个月到月底"将这些金额分开。

  1. 月份显示当月的计数
  2. 截至日期的合同就像从开始日期到结束日期的运行总数
  3. 财政年度从6月开始,就像一个运行总数,直到下一年的5月,之后的6月计数重置
  4. 截至月末的12个月将前11个月加到当前月份

结果是

    2015年1月1日2015年2月1日
  • 2015年3月1日
  • 7个月
  • 2015年5月1日
  • 2015年6月1日
  • 2015年7月01日
  • 2015/08/082015年9月1日
  • 2015年10月1日
  • 2015/11/01
  • 2015/12/01
  • 2015年1月1日合同生效日期
  • 2015年2月1日合同生效
  • 2015年3月1日合同生效日期
  • 2015年4月1日合同至今
  • 2015年5月1日合同生效日期57合同生效日期67合同至今
  • 2015年8月1日合同生效日期
  • 2015年9月1日合同至今
  • 2015年10月1日
  • 105合同至今
  • 2015年12月1日合同至今

我该如何在一个查询中编程这一切(而不必创建4个单独的表)我需要使用SQL Server管理工作室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()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演示

最终结果:
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) 

相关内容

  • 没有找到相关文章

最新更新