It would help if you provided the results that you were expecting as there are a couple of ways of doing this.
Using the previous sample data (except that Year is an Int instead of char) this is my take on the problem
declare @a table ([User] int, [Year] int, Status1 Char(4), Status2 Char(4), Status3 Char(4));
insert @a values ( 1, 2011, 'Pass', 'Fail', 'Fail' );
insert @a values ( 2, 2011, 'Pass', 'Pass', 'Pass' );
insert @a values ( 1, 2012, 'Pass', 'Fail', 'Pass' );
insert @a values ( 2, 2012, 'Pass', 'Fail', 'Pass' );
Select
x.*
From
@a x
JOIN @a y on x.[User]=y.[User]
and x.[Year] =y.Year+1
Where
(x.Status1=y.Status1 and x.Status1='Fail')
or (x.Status2=y.Status2 and x.Status2='Fail')
or (x.Status3=y.Status3 and x.Status3='Fail')
This will only work for checking consecutive years and not ranges of years.
_________________________________________________________________________
SSC Guide to Posting and Best Practices