gpt4 book ai didi

sql - SQL 中的 SUM 列

转载 作者:行者123 更新时间:2023-12-04 14:43:14 26 4
gpt4 key购买 nike

我在 SQL Server 有一张 table ,我需要对一列求和,如下例所示:

CREATE TABLE B
(
ID int,
Qty int,
)

INSERT INTO B VALUES (1,2)
INSERT INTO B VALUES (2,7)
INSERT INTO B VALUES (3,2)
INSERT INTO B VALUES (4,11)

SELECT *, '' AS TotalQty FROM B
ORDER BY ID
在这个例子中,我需要的是列 TotalQty给我这样的值(value)观:
 2
9
11
22
如何实现?

最佳答案

您可以使用 SUM在相关子查询或 CROSS APPLY 中像这样

关联子查询

SELECT ID,(SELECT SUM(Qty) FROM B WHERE B.id <= C.id) FROM B as C
ORDER BY ID

使用 CROSS APPLY
SELECT ID,D.Qty FROM B as C
CROSS APPLY
(
SELECT SUM(Qty) Qty
FROM B WHERE B.id <= C.id
)AS D
ORDER BY ID

输出
1   2
2 9
3 11
4 22

如果您使用的是 SQL Server 2012 或更高版本, SUM()Over()子句可以这样使用。
SELECT ID, SUM(Qty) OVER(ORDER BY ID ASC) FROM B as C
ORDER BY ID

编辑

在 SQL Server 2008 中执行此操作的另一种方法是使用递归 CTE。像这样的东西。

注:此方法基于 Roman Pekar 的回答在此线程 Calculate a Running Total in SQL Server .根据他的观察,这会比相关子查询和 CROSS APPLY 表现得更好。两个都
;WITH CTE as
(
SELECT ID,Qty,ROW_NUMBER()OVER(ORDER BY ID ASC) as rn
FROM B
), CTE_Running_Total as
(
SELECT Id,rn,Qty,Qty as Running_Total
FROM CTE
WHERE rn = 1
UNION ALL
SELECT C1.Id,C1.rn,C1.Qty,C1.Qty + C2.Running_Total as Running_Total
FROM CTE C1
INNER JOIN CTE_Running_Total C2
ON C1.rn = C2.rn + 1
)
SELECT *
FROM CTE_Running_Total
ORDER BY Id
OPTION (maxrecursion 0)

关于sql - SQL 中的 SUM 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30591320/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com