我要求通过交叉检查value2的值与value1的下一行来更新下表的column3
如果相等,则value3 = value1 * value2,如果不是value3 = value1
CREATE TABLE #tmpValue1(id INT IDENTITY(1,1), value1 FLOAT, value2 FLOAT, value3 FLOAT)
INSERT INTO #tmpValue1(value1, value2) VALUES
(1, 2), (2,3), (3,4), (4,5),(6,7),(7,8),(8,9)
表#tmpValue1将为:
id value1 value2 value3 (expected output)
1 1 2 1
2 2 3 4
3 3 4 9
4 4 5 16
5 6 7 6
6 7 8 49
7 8 9 64
上面,在value3中首先更新为1,因为Value2行中的2个首先与第二行的value1中的2进行比较,因此它将以秒为单位开始更新。
注意:Value1和Value2只是样本而且是真实的,它可以是不同的。
答案 0 :(得分:4)
我们可以通过使用LEFT JOIN来完成,如下所示:
ave
我们应该使用身份列的id,这对于执行这样的操作是有益的。
答案 1 :(得分:1)
您可以使用LAG
...虽然您的预期输出似乎有一些错误。
select
ID,
Value1,
Value2,
case
when lag(value2) over (order by ID) = value1 then lag(value2) over (order by ID) * value1
else value1 end as Value3
from #tmpValue1
<强>结果
ID Value1 Value2 Value3
1 1 2 1
2 2 3 4
3 3 4 9
4 4 5 16
5 6 7 6
6 7 8 49
7 8 9 64