WITH MyCTE(ClaimKey ,ARevDate ,ARowNum,CauseCode) AS
(
SELECT 123456789,20120101 ,1,'Fault'
UNION select 123456789,20120201, 2,NULL
UNION select 123456789,20120301 ,3,NULL
UNION select 123456789,20120401 ,4,NULL
UNION select 123456789,20120501 ,5,'Non-Fault'
UNION select 123456789,20120601 ,6,NULL
UNION select 123456789,20120701 ,7,NULL
UNION select 123456789,20120701 ,8,NULL
UNION SELECT 123456789,20120701 ,9,'Fault'
UNION select 123456789,20120701 ,10,NULL
UNION SELECT 123456789,20120701 ,11,'fault'
UNION SELECT 123456789,20120701 ,12,'non fault'
UNION select 123456789,20120701 ,13,NULL
UNION select 123456789,20120701 ,14,NULL
)
--SELECT TOP 1 [mc1].[CauseCode] FROM [MyCTE] [mc1] WHERE NOT [mc1].[CauseCode] IS NULL AND [mc1].[ARowNum] < 1 ORDER BY [mc1].[ARowNum] DESC
SELECT *
, CASE WHEN [mc].[CauseCode] IS NULL THEN (SELECT TOP 1 [mc1].[CauseCode] FROM [MyCTE] [mc1] WHERE NOT [mc1].[CauseCode] IS NULL AND [mc1].[ARowNum] < [mc].[ARowNum] ORDER BY [mc1].[ARowNum] DESC) ELSE mc.[CauseCode] END AS NewCauseCode
FROM [MyCTE] [mc]