2017-12-18 275 views
0

我有一个简单的查询:总和2008

Select 
fiscalweek, 4171 
From table 

我在财政周的顺序得到结果:

FiscalWeek 4171 
1   691 
2   746 
3   650 
4   625 
5   788 
6   581 
7   597 
8   772 
9   777 

我想在第三列,总和过去6周财的,或第二周周刚和1 & 2,

所以放出来会是:

FiscalWeek 4171 Sum 
1   691  691 
2   746  1437 
3   650  2087 
4   625  2712 
5   788  7671 
6   581  4081 
7   597  3393 
8   772  4013 
9   777  4140 

我试过使用rows unbounded preceeding,但是这在2008年没有提供,有什么建议吗?

+2

你是怎么得到Sum 987第7行的? – ttwis

+0

@ttwis错字错误,现在编辑 – PeterH

+0

你见过这篇文章吗? https://stackoverflow.com/questions/860966/calculate-a-running-total-in-sql-server – Alp

回答

2

对于这种简单的情况,简单的方法是自我表非等值连接。让supose t是你的桌子和a是FiscalWeek:

SQL Fiddle

MS SQL服务器2014架构设置

create table t (a int, t int); 
insert into t values 
(1,10), 
(2,11), 
(3,12), 
(4,13), 
(5,14), 
(6,15), 
(7,16), 
(8,17), 
(9,18), 
(10,19), 
(11,20), 
(12,10); 

查询1

select t1.a, t1.t, sum(t2.t) 
from t t1 
inner join t t2 
    on t2.a between t1.a-6 and t1.a --self non equijoin taking 6 prev. 
group by t1.a, t1.t 
order by t1.a 

Results

| a | t |  | 
|----|----|-----| 
| 1 | 10 | 10 | 
| 2 | 11 | 21 | 
| 3 | 12 | 33 | 
| 4 | 13 | 46 | 
| 5 | 14 | 60 | 
| 6 | 15 | 75 | 
| 7 | 16 | 91 | 
| 8 | 17 | 98 | 
| 9 | 18 | 105 | 
| 10 | 19 | 112 | 
| 11 | 20 | 119 | 
| 12 | 10 | 115 | 

硬的做法,可能是更多的SQL二十一世纪的友好与否,是应对CTE,分区和队伍建设。如果你有兴趣,可以搜索一下。

+0

在t1.a-6和t1之间的t2.a上,从未看到与on中的on之间的连接“ .a“,多数民众赞成真棒与作品一种享受谢谢你 – PeterH

+0

我见过你不会相信的东西。袭击从Orion的肩上起火。我在黑暗的TannhäuserGate附近看到了C形光束闪闪发光。子查询子查询。假等毒素。非第一范式数据库。所有这些时刻都会及时消失,就像雨中的泪水一样。该死的时候了。 – danihp