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

时间:2019-07-21 17:59:34

标签: sql

我在SQL DBA中有3列,即a和b以及rownumber。现在我的要求是我想为rownumber = 1计算a * b,结果将填充到rownumber = 2的列中并进行计算继续而不使用循环。 请帮忙,因为我在过去2个小时内一直处于困境之中

3 个答案:

答案 0 :(得分:0)

在这里要做的最一般的事情(但不是最佳选择,具体取决于您使用的查询引擎/ SQL版本)将是计算a * b,然后将结果与原始表进行JOIN,将行号映射到行号-1

答案 1 :(得分:0)

在使用SQL Server 2012时,将可以使用便捷的LEADLAG函数。 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-SQL ISNULL中)来消除此问题。

请注意未来的SQL问题,我在这里做了什么:我提供了一个SQL语句,该语句创建具有正确列的表,还提供了一个插入语句以添加示例数据。以后请自己动手,因为这样可以节省志愿者的时间。然后,您只需要添加一些示例结果即可。

也请尝试在可能的地方编辑您的问题,而不要通过评论提供更多信息。这将再次使您的问题更容易理解和回答。通常,请花一些时间阅读有关如何提出问题的帮助部分。

答案 2 :(得分:0)

尝试使用它。...

   ; 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列,并且可以随意使用任何组合的记录。

相关问题