使用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。然后我也尝试设置变量,但无法使其工作。
答案 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开头的分组创建单独的数字,然后第一个值使用它来对结果进行分区。