Click here to Skip to main content
15,886,799 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
How to get last emplyee Ids which are deleted (multiple) and get last emplyee Ids which are not deleted (single/multiple)in a single query ?

My code is as follows:

SQL
Select C3EmpRegId,EmpId,CitizenId,OldCardNo,OldAccountNo,NewCardNo,NewAccountNo
from
(SELECT top 1 C3EmpRegId,EmpId,CitizenId,CardNo as OldCardNo,AccountNo as OldAccountNo FROM EMPLOYEE
WHERE EmpId='556556y'  and CorporateId='IBM'  and SalaryAdvance=1 and IsDeleted=1

UNION

SELECT top 1 C3EmpRegId,EmpId,CitizenId,CardNo as NewCardNo,AccountNo as NewAccountNo FROM EMPLOYEE
WHERE EmpId='556556y'  and CorporateId='IBM'  and SalaryAdvance=1 and IsDeleted=0)
results
ORDER by C3EmpRegId desc


On trying as below I get the desired result(last data with IsDeleted=0)(Separate Query)
SQL
SELECT top 1 C3EmpRegId,EmpId,CitizenId,CardNo as OldCardNo,AccountNo as OldAccountNo FROM EMPLOYEE
WHERE EmpId='556556y'  and CorporateId='IBM'  and SalaryAdvance=1 and IsDeleted=0
ORDER by C3EmpRegId desc


On trying as below I get the desired result(last data with IsDeleted=1)(Separate Query)

SQL
SELECT top 1 C3EmpRegId,EmpId,CitizenId,CardNo as OldCardNo,AccountNo as OldAccountNo FROM EMPLOYEE
WHERE EmpId='556556y'  and CorporateId='IBM'  and SalaryAdvance=1 and IsDeleted=1
ORDER by C3EmpRegId desc
Posted
Updated 24-Feb-14 0:33am
v2
Comments
Kornfeld Eliyahu Peter 24-Feb-14 6:26am    
Consider UNION...
Maciej Los 24-Feb-14 7:14am    
Not sure what you mean: "How to get last emplyee Ids deleted and not deleted in a single query"?

1 solution

First of all, please read my comment to the question.

You're looking for query like that, probably:
SQL
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[^]!
SQL
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:
SQL
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.
 
Share this answer
 
Comments
Rahul 105 25-Feb-14 0:50am    
Tried as said .But didn't work.(Actually there is one data but no data shown)
SELECT t1.C3EmpRegId, t1.EmpId, t1.CitizenId, t1.CardNo AS OldCardNo, t1.AccountNo AS OldAccountNo,t1.ODUtilizedAmount,t1.ODLimit,t1.ODBalance, t2.CardNo AS NewCardNo, t2.AccountNo AS NewAccountNo
FROM (
SELECT TOP 1 E.C3EmpRegId,E.EmpId,E.CorporateId,E.CitizenId,E.CardNo,E.AccountNo, SA.SA_MaxUtilFees as ODUtilizedAmount,SA.SA_Limit as ODLimit,isnull(SA.SA_Limit, 0) - isnull(SA.SA_MaxUtilFees, 0)as ODBalance,E.SalaryAdvance
FROM Employee E INNER JOIN
SalaryAdvanceMaster SA on
SA.C3EmpRegId=E.C3EmpRegId
WHERE E.C3EmpRegId=16 and E.SalaryAdvance=1 and E.IsDeleted=1 ORDER by E.C3EmpRegId desc)
AS t1 INNER JOIN (
SELECT TOP 1 E.C3EmpRegId,E.EmpId,E.CorporateId,E.CitizenId,E.CardNo,E.AccountNo,SA.SA_MaxUtilFees as ODUtilizedAmount,SA.SA_Limit as ODLimit,isnull(SA.SA_Limit, 0) - isnull(SA.SA_MaxUtilFees, 0)as ODBalance
FROM Employee E
INNER JOIN
SalaryAdvanceMaster SA on
SA.C3EmpRegId=E.C3EmpRegId
WHERE E.C3EmpRegId=16 and E.SalaryAdvance=1 and E.IsDeleted=0 ORDER by E.C3EmpRegId desc
) AS t2 ON t1.EmpId = t2.EmpId
WHERE t1.EmpId='556556y' AND t1.CorporateId='IBM' AND t1.SalaryAdvance=1
ORDER BY t1.C3EmpRegId
Maciej Los 25-Feb-14 1:29am    
Post sample data. Use "Improve question" widget.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900