• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

总和2008

sql 来源:PeterH 4次浏览

我有一个简单的查询:总和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年没有提供,有什么建议吗?


===========解决方案如下:

对于这种简单的情况,简单的方法是自我表非等值连接。让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)