我想知道是否可以重复当前行的值,直到我找到另一个值,然后重复该值
当日期=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出现的那一刻起,使用这个数字总是这样的
1条答案
按热度按时间5n0oy7gb1#
是的,你能做到的。理想的方式是将
LAG()
与IGNORE NULL
s一起使用,但SQL Server不支持这样做。所以这里有另一种方法:这会为每个
code2
值的行分配一个“组”。每一个新的code2
都会生成一个新的组。然后,我们可以在该组上使用max()
来将值分布到该组中的所有行。最后,外部查询在
code
和code2
之间进行选择。Here是db<>小提琴。