求sql语句某列值行的乘积

举例,有以下表,可能有1000万条数据
v1 v2
----------
4 1
3 NULL
7 NULL
1 NULL
3 NULL
4 NULL
... NULL

我希望把v2更新为以下结果
v1 v2
----------
4 1
3 3
7 21
1 21
3 63
4 252
... ...

v2的公式为“上一个v2”× v1

最后说明,这个如果用游标的效率实在太慢了,无法接受,请教各位大侠其他解法

表加一个主键列id 从1递增

然后 用循环(估计也快不起来) 而且 真的10000000条数据 v2值会非常大 你打算用什么类型承接? 我试了下按照你的v1一直循环 到第40行记录就不行了

WHILE EXISTS(SELECT 1 FROM dbo.Table1 WHERE v2 IS NULL)
BEGIN
UPDATE a SET a.v2=b.v2*a.v1
FROM TABLE1 a
INNER JOIN TABLE1 b ON a.id=b.id+1
WHERE b.v2 IS NOT NULL AND a.v2 IS NULL
END

追问

根据测试,语句可以正确执行,但是我更新了一批102万条的数据量,执行完成花费了35分钟之久。不知道有没有更好的办法能再快一点?

温馨提示:内容为网友见解,仅供参考
无其他回答

如何用sql乘法求乘积?
根据题意,你应该想让1表中的A列和2表中的B列的对应行相乘,相乘不是问题,所以你的问题主要是在“对应行”上,如果你的两张表都有表示行号的字段,那就很好解决:\\x0d\\x0aselect a.A*b.B as 乘积 from table1 as a,table2 as b where a.ID=b.ID;\\x0d\\x0a如果没有行号,就必...

用sql语句算乘法
select a*b as乘积from tablename SELECT distinct a.购房人,a.房间号,(a.总房价 - (SELECT SUM( b.已收款额 )FROM table1 a, table2 b WHERE a.房间号 = b.房间号 ))FROM table1 a,table2 b where SQL具有数据定义、数据操纵和数据控制的功能。1、SQL数据定义功能:能够定义数据库...

如何用sql乘法求乘积?
根据题意,你应该想让1表中的A列和2表中的B列的对应行相乘,相乘不是问题,所以你的问题主要是在“对应行”上,如果你的两张表都有表示行号的字段,那就很好解决:select a.A*b.B as 乘积 from table1 as a,table2 as b where a.ID=b.ID;如果没有行号,就必须使用函数或者子查询来解决...

求sql语句某列值行的乘积
WHILE EXISTS(SELECT 1 FROM dbo.Table1 WHERE v2 IS NULL)BEGINUPDATE a SET a.v2=b.v2*a.v1FROM TABLE1 aINNER JOIN TABLE1 b ON a.id=b.id+1WHERE b.v2 IS NOT NULL AND a.v2 IS NULLEND

SQl 中怎么求几个列的乘积
单价乘以库存量 就是总价值 所以按照题目的意思 只要求总价值的最大值 select 产品名称,max('总价值') from 表名 where group by 产品名称

用sql语句算乘法
select a*b as乘积from tablename SELECT distinct a.购房人,a.房间号,(a.总房价 - (SELECT SUM( b.已收款额 )FROM table1 a, table2 b WHERE a.房间号 = b.房间号 ))FROM table1 a,table2 b where

oracle SQL 列相乘
select POWER(exp(sum(ln(t.a))),1\/count(*)) from (select 5 a from dualunionselect 8 a from dualunionselect 2 a from dualunionselect 3 a from dual) t

sql语句,一个表中的值等于另一个表两列的乘积
SELECT a.订购单号 , a.金额 from 订购单 a , 订购单明细 b where a.订购单号 = b.订购单号 and a.金额 = b.单价* b.数量

sql语句有没有求乘法的函数
select case when sum(case when price =0 then 1 else 0 end ) >0 then 0 else (case when sum(case when price<0 then 1 else 0 end )%2=0 then exp(sum(log(price)))else -1*exp(sum(log(abs(price))) end) end from aaa_bbb where id in (xx,xx,xx...)...

SQL语言如何把A表的一列与B表建立笛卡尔乘积
使用交叉连接产生笛卡尔乘积 select * from A cross join B 或不使用任何连接条件,也可产生笛卡尔乘积 select * from A,B 笛卡尔乘积与列无关,如果你想显示某几列,就在select后面指定相应的列名即可.补充:用A表的某列与B表做笛卡尔积,道理是一样的,你可以把该列看做是一个表源.如:select * ...

相似回答