首页 新闻 赞助 找找看

关于Sql 每两行求和的问题。

0
[待解决问题]

根据Id 排序 分别每两行求和。表如下。
id      value

1        1

3        1

4        2

5        3

7        3

8        4

 

类似于上面这样的结构。按每两行求和 使用SQL 应该如何实现。

yzy的主页 yzy | 菜鸟二级 | 园豆:317
提问于:2012-11-27 17:44
< >
分享
所有回答(4)
1

--创建临时表
CREATE TABLE #temp ( id INT, value INT )

--插入数据
INSERT INTO #temp( id ,value)
SELECT 1 ,1
UNION ALL
SELECT 3 ,1
UNION ALL
SELECT 4 ,2
UNION ALL
SELECT 5 ,3
UNION ALL
SELECT 7 ,3
UNION ALL
SELECT 8 ,4

--每两行求和
SELECT row1 ,
row2 ,
val1 ,
val2 ,
val1 + val2 AS result
FROM ( SELECT *
FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY id )AS row1 ,
value AS val1
FROM #temp
) t1
LEFT JOIN ( SELECT ROW_NUMBER() OVER ( ORDER BY id ) AS row2 ,
value AS val2
FROM #temp
) t2 ON t1.row1 + 1 = t2.row2
) t3
WHERE t3.row1 % 2 <> 0


--删除临时表
DROP TABLE #temp

johnMing | 园豆:223 (菜鸟二级) | 2012-11-28 11:58

如果数据非常多怎么办 我这里只是列举了其中几条

支持(0) 反对(0) yzy | 园豆:317 (菜鸟二级) | 2012-11-28 23:00

@yzy: 这个和数据量没有关系的,你理解思路就知道为什么了。

支持(0) 反对(0) johnMing | 园豆:223 (菜鸟二级) | 2012-11-29 16:21

@yzy: 当然,这个sql还是可以改进的,比如数据为NULL值的情况、过滤条件可以放在表关联之前,我就权当抛砖引玉吧。

支持(0) 反对(0) johnMing | 园豆:223 (菜鸟二级) | 2012-11-29 17:00
0

规则??

Tom.汤 | 园豆:3026 (老鸟四级) | 2012-11-28 12:22
0

就基于你给的表结构和数据,楼主可以尝试一下下面的T-SQL:

1 select sum(c_value) 
2 from(
3 select (case when c_Index % 2 = 0 then c_index-1 else c_Index end) as C_GroupFlag,c_value
4 from (select row_number() over (order by c_ID) C_Index,C_ID,c_value from t_test) t) tt
5 group by C_GroupFlag;

欢迎讨论!

jone_e | 园豆:1410 (小虾三级) | 2012-11-28 12:37
0

1楼的语句可以,如果数量多,楼主考虑的应该是将计算结果缓存到其他数据表,而不是多次执行运算计算结果。

acepro | 园豆:1218 (小虾三级) | 2012-12-05 14:33
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册