MSSQL实现逐条求和技巧(mssql逐条求和)
SQL汇总一组数据是常见的任务,在MSSQL中逐条求和也是一项技巧。所命名的逐条求和是指,在Microsoft SQL Server中给定一行的值,它可以实现在查询之前求和,也就是说,对于每一行,都可以在当前行之前求和。逐条求和可以显著提权查询的性能和可读性,尤其是当表中有大量数据时,而且可以实现批处理更新。
MSSQL实现逐条求和技巧有多种。首先,可以使用关系运算符来实现,其次是使用递归函数,最后可以使用窗口函数。
例如,在Microsoft SQL Server 2017系统中,你可以使用关系型运算符(如UNION ALL)来实现逐行求和技巧的效果。当你想在表中按指定列求和时,可以使用以下代码片段:
SELECT ID, SUM(TotalAmount) FROM
(SELECT ID,TotalAmount, ROW_NUMBER() OVER (ORDER BY ID) as row_number
FROM table_name ) AS t
WHERE row_number >1 GROUP BY ID
上述代码片段可以按ID列,给出每行之前所有行的总和数。
使用递归函数可以实现进一步深度的逐行求和效果,代码如下:
WITH cte AS
( SELECT ID,TotalAmount,
ROW_NUMBER() OVER (ORDER BY ID) as row_number FORM table_name
)SELECT ID, cte.TotalAmount,
SUM(TotalAmount) OVER (PARTITION BY ID ORDER BY ID ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING)FROM cte
ORDER BY ID
这两个示例给出的两个技巧都可以实现逐行求和的效果,但性能表现可能会有所不同。除此之外,使用窗口函数在某些情况下也能够实现逐行求和的效果,具体的示例代码为:
SELECT ID,TotalAmount,
SUM(TotalAmount) OVER (PARTITION BY ID ORDER BY ID)FROM table_name
ORDER BY ID
不管使用哪种技巧实现逐行求和,实现结果都是一样的。最终来说,什么样的技巧最适用,还需要你实际操作试试,才可以找到最适合对应场景的技巧。