我正在尝试在列中重复第一个特定的非空值,直到同一列中的下一个特定的非空值。我怎么做?
数据如下所示:
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