SQL Server Update列比较交叉行的值

时间:2016-09-19 16:38:03

标签: sql sql-server join

我要求通过交叉检查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只是样本而且是真实的,它可以是不同的。

2 个答案:

答案 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