我对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个月到月底"将这些金额分开。
- 月份显示当月的计数
- 截至日期的合同就像从开始日期到结束日期的运行总数
- 财政年度从6月开始,就像一个运行总数,直到下一年的5月,之后的6月计数重置
- 截至月末的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)