这是我的表的子集:
|id |日期|值|
| ------------ | ------------ | ------------ |
| 1 | 01/01/2022 | 5 |
| 1 | 02/02/2022 | 0 |
| 1 | 03/01/2022 | 0 |
| 1 | 04/02/2022 | 10 |
| 2 | 01/04/2022 | 5 |
| 2 | 02/04/2022 | 3 |
| 2 | 03/04/2022 | 0 |
| 2 | 04/04/2022 | 10 |
如果值字段中有0,我希望将它们替换为非零值,该非零值出现在0序列结束后,按id进行分区。
我尝试过使用LAG,但我真的很难,因为它的值高于表中的当前值。
任何帮助都将不胜感激。
转换后的表格外观
|id |日期|值|
| ------------ | ------------ | ------------ |
| 1 | 01/01/2022 | 5 |
| 1 | 02/02/2022 | 10 |
| 1 | 03/01/2022 | 10 |
| 1 | 04/02/2022 | 10 |
| 2 | 01/04/2022 | 5 |
| 2 | 02/04/2022 | 3 |
| 2 | 03/04/2022 | 10 |
| 2 | 04/04/2022 | 10 |
4条答案
按热度按时间bprjcwpo1#
您可以使用交叉应用;
方形底座
cwtwac6a2#
假设用替换它们表示要更新表,最简单的方法是关联子查询:
mwg9r5ms3#
我们用0后面的第一个非0值对每个0进行分组,然后使用
max() over()
替换组中的0。Fiddle升
sd2nnvve4#
您可以使用
outer apply
来完成:您可以在此db<>fiddle上进行测试