【发布时间】:2014-12-05 05:50:15
【问题描述】:
我需要对每一行求一个总和,并将前一行的总数相加
这是样本数据
Fax Counts
2063504752 1
2080906666 1
7180930966 2
7182160901 1
7182232046 1
7182234134 1
7182234166 0
7182248132 2
7182390090 1
7182395285 0
7185462234 0
7185465013 1
7185465281 1
7185466029 0
here's the desired output
Fax Counts Totals
2063504752 1 1
2080906666 1 2
7180930966 2 4
7182160901 1 5
7182232046 1 6
7182234134 1 7
7182234166 0 7
7182248132 2 9
7182390090 1 10
7182395285 0 10
7185462234 0 10
7185465013 1 11
7185465281 1 12
7185466029 0 12
所以我想取第一行,将结果记录在 Totals 列 (1)
转到第二行,将该行的计数 (1) 添加到上一行 (1) 的总计中,将结果记录在总计 (2) 中
转到第三行。将该行 (2) 的计数添加到上一行 (2) 的总计中,将结果记录在总计 (4) 中
转到第四行。将该行 (1) 中的计数添加到上一行 (4) 中的总计中,将结果记录在总计中 (5)
等等
我知道 LAG 函数会从前一行读取值,但我无法对前 2 行进行编码,这似乎是一个循环引用。
据我所知。它只是对最后 2 行求和,我不能将之前的值相加
WITH T AS
(SELECT 2063504752 fax
,1 counts
FROM DUAL
UNION ALL
SELECT 2080906666
,1
FROM DUAL
UNION ALL
SELECT 7180930966
,2
FROM DUAL
UNION ALL
SELECT 7182160901
,1
FROM DUAL
UNION ALL
SELECT 7182232046
,1
FROM DUAL
UNION ALL
SELECT 7182234134
,1
FROM DUAL
UNION ALL
SELECT 7182234166
,0
FROM DUAL
UNION ALL
SELECT 7182248132
,2
FROM DUAL
UNION ALL
SELECT 7182390090
,2
FROM DUAL
UNION ALL
SELECT 7182395285
,0
FROM DUAL
UNION ALL
SELECT 7185462234
,0
FROM DUAL
UNION ALL
SELECT 7185465013
,1
FROM DUAL
UNION ALL
SELECT 7185465281
,1
FROM DUAL
UNION ALL
SELECT 7185466029
,0
FROM DUAL)
SELECT fax
,counts
,counts + LAG(counts, 1) OVER (ORDER BY fax) Counts1
FROM T
【问题讨论】: