[英]using group by to getting 3 different column values from a single table
我已经尝试过这段代码,但没有得到任何应用程序,请帮助我提前致谢
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
当您正在寻找汇总结果时,通过使用 Case 和 Sum 我们可以根据您假设的数据获得所需的结果
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.