p**e 发帖数: 11 | 1 有一个table, 像这样
id1 value
10 2
10 3
10 1
20 5
20 3
30 4
想把第一行的value跟第二行相加, 得到一个值作为第三列, 像这样:
id1 value total
10 2 2
10 3 5
10 1 6
20 5 11
20 3 14
30 4 18
怎么写query啊??
//SQL server 2008环境 | D**C 发帖数: 6754 | 2 sigh, 用编程语言实现吧,一定要query吗? | i****a 发帖数: 36252 | 3 this needs an unique ID to work. so you cannot use your id1. you can add
an identity column to your table
Select *,
(select sum(b.value)
from yourtable b
where b.uniqueID <= a.uniqueID) running_total
from yourtable a
order by running_total | M*****r 发帖数: 1536 | 4 select t2.r2, SUM(t1.val)
from
(select ROW_NUMBER() over (order by id) as r1 , val, id from tbl) t1,
(select ROW_NUMBER() over (order by id) as r2 from tbl) t2
where t1.r1 <= t2.r2
group by t2.r2
【在 p**e 的大作中提到】 : 有一个table, 像这样 : id1 value : 10 2 : 10 3 : 10 1 : 20 5 : 20 3 : 30 4 : 想把第一行的value跟第二行相加, 得到一个值作为第三列, 像这样: : id1 value total
| B*****g 发帖数: 34098 | 5 没看懂 t2
【在 M*****r 的大作中提到】 : select t2.r2, SUM(t1.val) : from : (select ROW_NUMBER() over (order by id) as r1 , val, id from tbl) t1, : (select ROW_NUMBER() over (order by id) as r2 from tbl) t2 : where t1.r1 <= t2.r2 : group by t2.r2
| B*****g 发帖数: 34098 | 6 (update似乎不一样也无所谓)
不知道这个能不能用,oracle下面sql必须加hint,否则t1,t2可能不一样。当然oracle
就不用这么做了,有现成的function。
WITH temptable (id, value, seqno)
AS
(
SELECT id, value, ROW_NUMBER() OVER (ORDER BY ID) AS seqno FROM table
)
SELECT t1.id, t1.seqno, SUM(t2.value)
FROM temptable, t1, temptable t2
WHERE t1.id = t2.id
AND t1.seqno >= t2.seqno
GROUP BY t1.id, t1.seqno
【在 p**e 的大作中提到】 : 有一个table, 像这样 : id1 value : 10 2 : 10 3 : 10 1 : 20 5 : 20 3 : 30 4 : 想把第一行的value跟第二行相加, 得到一个值作为第三列, 像这样: : id1 value total
| c*******e 发帖数: 8624 | 7 records in tables are not ordered by nature
【在 p**e 的大作中提到】 : 有一个table, 像这样 : id1 value : 10 2 : 10 3 : 10 1 : 20 5 : 20 3 : 30 4 : 想把第一行的value跟第二行相加, 得到一个值作为第三列, 像这样: : id1 value total
| a9 发帖数: 21638 | 8 他这个sum好像是一直累加起来的。
oracle
【在 B*****g 的大作中提到】 : (update似乎不一样也无所谓) : 不知道这个能不能用,oracle下面sql必须加hint,否则t1,t2可能不一样。当然oracle : 就不用这么做了,有现成的function。 : WITH temptable (id, value, seqno) : AS : ( : SELECT id, value, ROW_NUMBER() OVER (ORDER BY ID) AS seqno FROM table : ) : SELECT t1.id, t1.seqno, SUM(t2.value) : FROM temptable, t1, temptable t2
| B*****g 发帖数: 34098 | 9 ding. 那Modeler的解法是正确的。
【在 a9 的大作中提到】 : 他这个sum好像是一直累加起来的。 : : oracle
|
|