一些非常基本的东西可能是
SELECT MT.Date, MT.Text,
CASE WHEN MT.Text = 'bbb' THEN Number
ELSE (SELECT TOP 1 Number
FROM MyTable MT2
WHERE MT2.Date < MT.Date AND
MT2.Text = 'bbb'
ORDER BY MT2.Date DESC)
END Number,
CASE WHEN MT.Text = 'bbb' THEN Number2
ELSE (SELECT TOP 1 Number2
FROM MyTable MT2
WHERE MT2.Date < MT.Date AND
MT2.Text = 'bbb'
ORDER BY MT2.Date DESC)
END Number2
FROM MyTable MT
SQLFiddle:http ://sqlfiddle.com/#!3/cbee5/3
或使用OUTER APPLY
(应该更快)
SELECT MT.Date, MT.Text,
CASE WHEN MT.Text = 'bbb' THEN MT.Number
ELSE MT2.Number
END Number,
CASE WHEN MT.Text = 'bbb' THEN MT.Number2
ELSE MT2.Number2
END Number2
FROM MyTable MT
OUTER APPLY (SELECT TOP 1 MT2.Number, MT2.Number2
FROM MyTable MT2
WHERE MT.Text <> 'bbb' AND
MT2.Text = 'bbb' AND
MT2.Date < MT.Date
ORDER BY MT2.Date DESC
) MT2
SQLFiddle:http ://sqlfiddle.com/#!3/cbee5/7