简体   繁体   中英

using group by to getting 3 different column values from a single table

i have tried this code but getting no of applications only please help me thanks in advance

SELECT PositionName,
(SELECT COUNT(ApplicationNo) FROM APPLICATION) AS   
    NoOfApplications, 
      (SELECT COUNT(ApplicationNo) 
               FROM APPLICATION
               WHERE EligibleStatus1=1 AND  
    EligibleStatus2=1)  AS Qualified,
      (SELECT COUNT(ApplicationNo) 
               FROM APPLICATION 
         WHERE EligibleStatus1=2 OR  
    EligibleStatus2=2) AS DisQualified
    FROM APPLICATION
    GROUP BY PositionName ORDER BY PositionName

PositionName    Elligible   Disqualified    NoOfApplications
A                   3             4               7
B                   3             4               7
C                   3             4               7

PositionName    Elligible   Disqualified    NoOfApplications
A                   1             2               3
B                   1             1               2
C                   1             1               2
    SELECT a.PositionName,COUNT(a.ApplicationNo) AS           
NoOfApplications,apl1.Qualified,apl2.DisQualified
FROM APPLICATION a
INNER JOIN (
SELECT PositionName, COUNT(ApplicationNo) AS Qualified
FROM APPLICATION
WHERE EligibleStatus1=1 AND  
EligibleStatus2=1 
GROUP BY PositionName
)apl1 ON a.PositionName=apl1.PositionName
INNER JOIN (
SELECT PositionName, COUNT(ApplicationNo) AS DisQualified
FROM APPLICATION
WHERE EligibleStatus1=1 AND  
EligibleStatus2=1 
GROUP BY PositionName
)apl2 ON a.PositionName=apl2.PositionName
GROUP BY PositionName ORDER BY PositionName  
SELECT      Positionname,
            Count(NoOfApplication) AS NoOfApplications,
            Max(COUNT1)            AS Qualified,
            Max(COUNT2)            AS Diqualified
FROM        APPLICATION A
CROSS APPLY (SELECT Count(NoOfApplication) AS COUNT1
             FROM   APPLICATION A
             WHERE  EligibleStatus1 = 1
                    AND EligibleStatus2 = 1)B
CROSS APPLY (SELECT Count(NoOfApplication) AS COUNT2
             FROM   APPLICATION A
             WHERE  EligibleStatus1 = 2
                     OR EligibleStatus2 = 2)C
GROUP       BY PositionName

as you are looking for Summary result then by using Case and Sum we can get desired Result basing on your assumpted Data

select PositionName,
sum(case when EligibleStatus1 = 1 AND EligibleStatus2=1 then 1 else 0 end) AS Qualified,
sum(case when EligibleStatus1  = 2 OR EligibleStatus2=2 then 1 else 0 end) AS DisQualified,
count(ApplicationNo) 
from APPLICATION 
GROUP BY PositionName
ORDER BY PositionName

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM