- 源表**
| 行号|旗帜|币种_值|先前值|
| - ------| - ------| - ------| - ------|
| 1个|C级|第1版|零|
| 第二章|P级|V11|零|
| 三个|P级|V12|零|
| 四个|C级|第2版|零|
| 五个|C级|V31|零|
| 六个|P级|三十二|零|
我有一个场景,我必须比较前一行的值和当前行的值,并根据case条件更新Curr_value列,并且应该为表中的所有记录导出curr_value和Prev_value。
用于导出Curr_value列的条件是case when(Flag ='C ')then curr_value else Prev_value end,并且我使用MSSQL中的LAG函数来获取Previous value列。
- 输出**
| 行号|旗帜|币种_值|先前值|
| - ------| - ------| - ------| - ------|
| 1个|C级|第1版|无|
| 第二章|P级|第1版|第1版|
| 三个|P级|第1版|第1版|
| 四个|C级|第2版|第1版|
| 五个|C级|第3版|第2版|
| 六个|P级|第3版|第3版|
我试着用While循环实现同样的效果,但是执行时间非常长。请告诉我在MSSQL中不使用循环是否可以实现同样的输出。
2条答案
按热度按时间siotufzp1#
我设置了以下脚本作为完整的工作示例:
但我认为你感兴趣的主要部分是:
只需添加
sample_data.Flag = 'C'
的条件,然后返回Curr_value
或'LAG的结果yrdbyhpb2#
只需使用滞后功能...