在SQL中重复该列的上一个值

nbnkbykc  于 2022-09-18  发布在  Java
关注(0)|答案(1)|浏览(141)

我想知道是否可以重复当前行的值,直到我找到另一个值,然后重复该值

当日期=201903将始终是代码的值,我想重复该值,直到我找到一个不同的值并重复该值。

CREATE TABLE ForgeRock
(
     [id] VARCHAR(13), 
     [code] VARCHAR(57),
     [date] VARCHAR(13),
     [code2] VARCHAR(7)
);

INSERT INTO ForgeRock ([id], [code], [date], [code2])
VALUES (1, 21, 201903, 0),
       (1, 21, 201902, 0),
       (1, 21, 201901, 0),
       (1, 21, 201812, 0),
       (1, 21, 201811, 0),
       (1, 21, 201810, 22),
       (1, 21, 201809, 0),
       (1, 21, 201808, 0),
       (1, 21, 201807, 0);

SELECT
    *,  
    result = (CASE WHEN date = 201903 THEN code
                   WHEN date <> 201903 AND code2 = 0 THEN code
                   ELSE code2 
              END)   
FROM
    ForgeRock

但是数字22只重复一次,我希望从22出现的那一刻起,使用这个数字总是这样的

5n0oy7gb

5n0oy7gb1#

是的,你能做到的。理想的方式是将LAG()IGNORE NULLs一起使用,但SQL Server不支持这样做。所以这里有另一种方法:

select fr.*,
       (case when grp = 0 then code else max(code2) over (partition by grp) end) as result
from (select fr.*,
             sum(case when code2 <> 0 then 1 else 0 end) over (order by date desc) as grp
      from ForgeRock fr
     ) fr
order by date desc;

这会为每个code2值的行分配一个“组”。每一个新的code2都会生成一个新的组。然后,我们可以在该组上使用max()来将值分布到该组中的所有行。

最后,外部查询在codecode2之间进行选择。

Here是db<>小提琴。

相关问题