First of all, please read my comment to the question.
You're looking for query like that, probably:
SELECT C3EmpRegId, EmpId, CitizenId, CardNo, AccountNo, IsDeleted
FROM (
SELECT ROW_NUMBER() OVER(PARTITION BY IsDeleted ORDER BY C3EmpRegId) AS RowNo, C3EmpRegId, EmpId, CitizenId, CardNo, AccountNo, IsDeleted
FROM EMPLOYEE
) AS A
WHERE RowNo = 1 AND EmpId='556556y' and CorporateId='IBM' and SalaryAdvance=1
For further information, please see
ranking functions[
^].
By The Way:
You can't use different column names with
UNION[
^]!
SELECT top 1 C3EmpRegId,EmpId,CitizenId,CardNo as OldCardNo, AccountNo as OldAccountNo FROM EMPLOYEE
...
UNION
SELECT top 1 C3EmpRegId,EmpId,CitizenId,CardNo as NewCardNo,AccountNo as NewAccountNo FROM EMPLOYEE
...
If you would like to get old and new
CardNo
and
AccountNo
, youo should join 2 result sets as follow:
SELECT t1.C3EmpRegId, t1.EmpId, t1.CitizenId, t1.CardNo AS OldCardNo, t1.AccountNo AS OldAccountNo, t2.CardNo AS NewCardNo, t2.AccountNo AS NewAccountNo
FROM (
SELECT *
FROM Employee
WHERE IsDeleted =1
) AS t1 INNER JOIN (
SELECT C3EmpRegId, EmpId, CitizenId, CardNo, AccountNo
FROM Employee
WHERE AND IsDeleted =0
) AS t2 ON t1.EmpId = t2.EmpId
WHERE t1.EmpId='556556y' AND t1.CorporateId='IBM' AND t1.SalaryAdvance=1
ORDER BY t1.C3EmpRegId
Note: I don't know the structure of your database (tables), so above query can miss your needs.