另一種方法(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