如何在第3列中将每行的总和乘以两行和?
这是一个截图:
你可以看到id 1 sum是10但是id 2 sum是10 + 50 = 60 第三笔和是60 + 100 = 160,依此类推。
使用Cte它对我来说很好。我需要;with cte
表示虽然代码我需要总和
示例如下所示
DECLARE @t TABLE(ColumnA INT, ColumnB VARCHAR(50));
INSERT INTO @t
VALUES (10,'1'), (50,'2'), (100,'3'), (5,'4'), (45,'5');
;WITH cte AS
(
SELECT ColumnB, SUM(ColumnA) asum
FROM @t
GROUP BY ColumnB
), cteRanked AS
(
SELECT asum, ColumnB, ROW_NUMBER() OVER(ORDER BY ColumnB) rownum
FROM cte
)
SELECT
(SELECT SUM(asum)
FROM cteRanked c2
WHERE c2.rownum <= c1.rownum) AS ColumnA,
ColumnB
FROM
cteRanked c1;
答案 0 :(得分:1)
一个不需要显式分析函数的选项是使用相关子查询来计算运行总计:
SELECT
t1.ID,
t1.Currency,
(SELECT SUM(t2.Currency) FROM yourTable t2 WHERE t2.ID <= t1.ID) AS Sum
FROM yourTable t1
<强>输出:强>
在这里演示:
答案 1 :(得分:1)
看起来你需要一个简单的运行总计。
在SQL Server 2012及更高版本中,有一种简单有效的方法来计算运行总计。您可以使用SUM(...) OVER (ODER BY ...)
,如下例所示:
示例数据
DECLARE @t TABLE(ColumnA INT, ColumnB VARCHAR(50));
INSERT INTO @t
VALUES (10,'1'), (50,'2'), (100,'3'), (5,'4'), (45,'5');
<强>查询强>
SELECT
ColumnB
,ColumnA
,SUM(ColumnA) OVER (ORDER BY ColumnB
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS SumColumnA
FROM @t
ORDER BY ColumnB;
<强>结果强>
+---------+---------+------------+
| ColumnB | ColumnA | SumColumnA |
+---------+---------+------------+
| 1 | 10 | 10 |
| 2 | 50 | 60 |
| 3 | 100 | 160 |
| 4 | 5 | 165 |
| 5 | 45 | 210 |
+---------+---------+------------+
对于SQL Server 2008及更低版本,您需要使用相关的子查询或简单的游标,如果表格很大,这可能会更快。