SQL基于其他列和上一行插入新列

时间:2017-03-11 16:28:25

标签: sql sql-server

使用SQL Server,我试图根据限定符和值列向下表添加第四列。如果限定符为130,则新列应该是值列中的任何数字。如果限定符不是130,则应使用与最新限定符130行关联的先前值。

PrimaryKey | Qualifier | Value
001        | 130       | 3
002        | 207       | 24
003        | 301       | 27
004        | 130       | 8
005        | 810       | 1
002        | 900       | 9

上表将成为下表。

PrimaryKey | Qualifier | Value | NewColumn
001        | 130       | 3     | 3
002        | 207       | 24    | 3
003        | 301       | 27    | 3
004        | 130       | 8     | 8
005        | 810       | 1     | 8
002        | 900       | 9     | 8

我试图用滞后来做这件事,但无法弄清楚如何自我引用NewColumn。然后我也尝试设置变量,但无法使其工作。

2 个答案:

答案 0 :(得分:2)

我认为最简单的方法是var currentAuthor = authors.eq(i);

outer apply

答案 1 :(得分:1)

你也可以像这样使用sum + first_value:

select *, first_value(Value) over (partition by GRP order by PrimaryKey) from (
  select *, sum(case when Qualifier = '130' then 1 else 0 end) 
            over (order by PrimaryKey) as GRP
  from #tmp
) X

内部选择中的sum + case为每个以限定符130开头的分组创建单独的数字,然后第一个值使用它来对结果进行分区。

Example