Seems you forgot about
WHERE
statement:
SELECT *
FROM (
SELECT BDATE AS BIRTHDAY, DATEDIFF(YEAR, BDATE, GETDATE()) AS AGE,
DATEADD(YEAR, DATEDIFF(YEAR, BDATE, GETDATE()), BDATE) AS AddAgeInBdate,
DATEDIFF(DAY, GETDATE(), DATEADD(YEAR, DATEDIFF(YEAR, BDATE, GETDATE()), BDATE)) AS NoOfDaysForBdate
FROM EMP
) AS A
WHERE AddAgeInBdate>=GETDATE()
ORDER BY AddAgeInBdate
As per OP's comments:
SELECT *
FROM (
SELECT BDATE AS BIRTHDAY, DATEDIFF(YEAR, BDATE, GETDATE()) AS AGE,
DATEADD(YEAR, DATEDIFF(YEAR, BDATE, GETDATE()), BDATE) AS AddAgeInBdate,
DATEDIFF(DAY, GETDATE(), DATEADD(YEAR, DATEDIFF(YEAR, BDATE, GETDATE()), BDATE)) AS NoOfDaysForBdate
FROM EMP
) AS A
ORDER BY CASE WHEN AddAgeInBdate>=GETDATE() THEN 0 ELSE 1 END ASC, AddAgeInBdate
Result:
1988-08-18 00:00:00.000 27 2015-08-18 00:00:00.000 6
1991-08-28 00:00:00.000 24 2015-08-28 00:00:00.000 16
1990-09-04 00:00:00.000 25 2015-09-04 00:00:00.000 23
2000-04-04 00:00:00.000 15 2015-04-04 00:00:00.000 -130
1988-05-10 00:00:00.000 27 2015-05-10 00:00:00.000 -94
2000-07-22 00:00:00.000 15 2015-07-22 00:00:00.000 -21