我正在尝试在列中重复第一个特定的非空值,直到同一列中的下一个特定的非空值。我怎么做?

数据如下所示:

ID | Msg
---+-----
 1 |
 2 |
 3 |
 4 |
 5 | Beg
 6 | End
 7 |
 8 | Beg
 9 |
10 |
11 |
12 | End

应该是这样的:
ID | Msg
---+-----
 1 |
 2 |
 3 |
 4 |
 5 | Beg
 6 | End
 7 |
 8 | Beg
 9 | Beg
10 | Beg
11 | Beg
12 | End

我调查了LAG()LEAD(),但我一直认为我必须为此使用CURSOR。我只知道这些,但尚未在这种情况下使用它们。

最佳答案

另一个使用标志和sum() over的选项

示例

Select ID
      ,Msg = case when sum( case when [Msg]='Beg' then  1 when [Msg]='End' then -1  else 0 end ) over (order by ID) = 1 and Msg='' then 'Beg' else Msg end
 From  YourTable

返回
ID  Msg
1
2
3
4
5   Beg
6   End
7
8   Beg
9   Beg
10  Beg
11  Beg
12  End

09-13 01:23