另一种方法(LAST_VALUE不为我工作):
如果你有行号或时间戳字段则没有问题
@tb1 = SELECT * FROM
(VALUES
(1, "Noah1"),
(2, (string)null),
(3, "Noah3"),
(5, (string) null),
(6, (string)null),
(7, "Noah6"),
(8, "Noah7")
) AS T(Timestamp, a);
@tb1 =
SELECT Timestamp,
[a],
[a] != null && [a] != LEAD([a], 1) OVER(ORDER BY Timestamp ASC) AS aSwitch
FROM @tb1;
@tb1 =
SELECT Timestamp,
[a],
SUM(aSwitch ? 1 : 0) OVER(ORDER BY Timestamp ASC ROWS UNBOUNDED PRECEDING) AS aGrp
FROM @tb1;
@tb1 =
SELECT Timestamp,
FIRST_VALUE([a]) OVER(PARTITION BY aGrp ORDER BY Timestamp ASC) AS aFilled
FROM @tb1;
OUTPUT @tb1 TO "/test.csv" USING Outputters.Csv(outputHeader: true);
结果:
"Timestamp","aFilled"
1,"Noah1"
2,"Noah1"
3,"Noah3"
5,"Noah3"
6,"Noah3"
7,"Noah6"
8,"Noah7"
但是如果你没有这样的领域该怎么办?在简单的情况下,你可以使用哑场:
@tb1 = SELECT * FROM
(VALUES
("Noah1"),
((string)null),
("Noah3"),
((string) null),
((string)null),
("Noah6"),
("Noah7")
) AS T(a);
@tb1 = SELECT 1 AS Timestamp,
[a]
FROM @tb1;
谢谢大家的指导。我不是开发者,因此可能需要一段时间才能搞清楚,但我真诚地感谢所有的帮助。 – Ally