Одним простым решением было бы использование старых добрых подзапросов.
Сначала создайте и заполните образец таблицы ( Пожалуйста, сохраните этот шаг в своих будущих вопросах):
DECLARE @T AS TABLE
(
Id int,
A char(2),
B char(2),
Sequence int
)
INSERT INTO @T (Id, A, B, Sequence) VALUES
(1, 'a0', 'b0', 0),
(2, 'a0', 'b6', 0),
(1, 'a1', NULL, 1),
(2, 'a1', NULL, 1),
(2, NULL, 'b2', 2),
(2, 'a3', 'b3', 3),
(2, NULL, 'b4', 4);
Запрос:
SELECT Id,
(
-- get the last non-null A value for the specified Id
SELECT TOP 1 A
FROM @T As T1
WHERE T1.Id = T0.Id
AND A IS NOT NULL
ORDER BY Sequence DESC
) As A,
(
-- get the last non-null B value for the specified Id
SELECT TOP 1 B
FROM @T As T1
WHERE T1.Id = T0.Id
AND B IS NOT NULL
ORDER BY Sequence DESC
) As B,
MAX(Sequence) As Sequence
FROM @T As T0
GROUP BY Id
Результат:
Id A B Sequence
1 a1 b0 1
2 a3 b4 4