Sql 我想将两列相乘,并将结果添加到第一列的下一行

Sql 我想将两列相乘,并将结果添加到第一列的下一行,sql,Sql,我的SQL DBA中有3列,即a、b和rownumber。现在我的要求是,我要计算rownumber=1的a*b,结果将填充到rownumber=2的列中,计算将在不使用循环的情况下继续进行。 请帮助我,因为我在过去的两个小时里被卡住了。这里要做的最一般但不是最佳的事情,取决于您使用的查询引擎/SQL版本,将计算a*b,然后根据原始表加入结果,将rownumber映射到rownumber-1。当您使用SQL Server 2012时,您将能够使用方便的超前或滞后功能。LEAD获取下一行的值,而L

我的SQL DBA中有3列,即a、b和rownumber。现在我的要求是,我要计算rownumber=1的a*b,结果将填充到rownumber=2的列中,计算将在不使用循环的情况下继续进行。
请帮助我,因为我在过去的两个小时里被卡住了。

这里要做的最一般但不是最佳的事情,取决于您使用的查询引擎/SQL版本,将计算a*b,然后根据原始表加入结果,将rownumber映射到rownumber-1。

当您使用SQL Server 2012时,您将能够使用方便的超前或滞后功能。LEAD获取下一行的值,而LAG获取上一行的值

例如,请看:

declare @demo table (a int, b int, rownumber int)

insert into @demo VALUES
(2, 1, 1),
(4, 6, 2),
(4, 3, 3),
(5, 6, 4),
(2, 3, 5)

SELECT LAG(a * b) over(order by rownumber) as col1, rownumber
FROM @demo 
结果:

col1    rownumber
NULL    1
2       2
24      3
12      4
30      5
您可以将其粘贴到SSMS中的新查询窗口中并运行它。请注意,第一个结果为NULL。这是意料之中的,因为没有上一行。如果愿意,您可以使用COALESCE或在T-sqlisnull中消除此问题

请注意,对于未来的SQL问题,我在这里做了什么:我提供了一个SQL语句,它创建了一个表,包含正确的列,还提供了一个insert语句来添加示例数据。以后请自己做,因为这样可以节省志愿者的时间。除此之外,您还应该添加一些示例结果

另外,请尽量编辑您的问题,而不是通过评论提供更多信息。这同样会使你的问题更容易理解和回答。请花点时间阅读有关如何提问的帮助部分。

尝试使用此

   ; with cte as ( select a*b as res, row_number + 1 as Rownumber from table)
   select t.a, t.b, c.res, t.rownumber from table as t inner join cte as c on t.rownumber=c.rownumber 

这里有所有3列,您可以自由使用任何组合的任何记录。

欢迎使用SO。您使用的数据库版本信息也是必需的?您可以使用超前和滞后函数。请提供示例数据和所需结果,以及适当的数据库标记。您好。感谢您的回复。我使用的是SQL 2012数据库a列中有3列,b列和rownumber作为C列。我想用a和b乘以第1行。如果a列的值是2,b列的值是1,那么a*b即2*1=2应该是a列的值,行=2。Shreya,要使用这个网站,你应该:1使用链接直接向问题添加信息,而不是在一条评论和2中,在评论中回答某人,在他们的用户名前面加@,例如@JonathanWillcock-否则将不会有通知。堆栈溢出不是一个论坛。您可能还想阅读.Ya中的使用指南,但这不是最佳解决方案。感谢supportLag在这里不起作用,因为我们还没有填充列A。它是基于第一行计算的派生列。然后请编辑您的问题,提供示例数据,并以我显示的形式提供示例结果。否则我们真的帮不了你。