根据Id 排序 分别每两行求和。表如下。
id value
1 1
3 1
4 2
5 3
7 3
8 4
类似于上面这样的结构。按每两行求和 使用SQL 应该如何实现。
--创建临时表
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
如果数据非常多怎么办 我这里只是列举了其中几条
@yzy: 这个和数据量没有关系的,你理解思路就知道为什么了。
@yzy: 当然,这个sql还是可以改进的,比如数据为NULL值的情况、过滤条件可以放在表关联之前,我就权当抛砖引玉吧。
规则??
就基于你给的表结构和数据,楼主可以尝试一下下面的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;
欢迎讨论!
1楼的语句可以,如果数量多,楼主考虑的应该是将计算结果缓存到其他数据表,而不是多次执行运算计算结果。