Reputation: 133
How can I get my subquery to calculate each employees On-Time rate, group them, and then sort them in Desc order?
SELECT
EMPLOYEE_NAME AS EMPLOYEE,
(
SELECT
(
SELECT
CAST(COUNT(APE_BUSDRIVER_STATUS_OBJID) AS DECIMAL)
FROM dbo.APE_BUSDRIVER_MAIN
WHERE APE_AREA_OBJID = 3
AND YEAR_TIME = '2014'
AND ACTIVE = 1
AND APE_BUSDRIVER_STATUS_OBJID = 1
)
/
(
SELECT
CAST(COUNT(APE_BUSDRIVER_STATUS_OBJID) AS DECIMAL)
FROM dbo.APE_BUSDRIVER_MAIN
WHERE APE_AREA_OBJID = 3
AND YEAR_TIME = '2014'
AND ACTIVE = 1
)
) AS YIELD
FROM dbo.APE_BUSDRIVER_MAIN
WHERE YEAR_TIME = '2014'
AND APE_AREA_OBJID = 3
AND ACTIVE = 1
GROUP BY EMPLOYEE_NAME
ORDER BY YIELD DESC
RESULTS:
as you can see, the sub query is giving the same results for each employee.
here is the table FYI:
continued...
NOTE:
APE_BUSDRIVER_STATUS_OBJID:
1 = ON-TIME
2 = LATE
Upvotes: 0
Views: 101
Reputation:
SELECT
EMPLOYEE_NAME AS EMPLOYEE,
CAST(COUNT(CASE WHEN APE_BUSDRIVER_STATUS_OBJID = 1 THEN APE_BUSDRIVER_STATUS_OBJID END) AS DECIMAL) /
CAST(COUNT(APE_BUSDRIVER_STATUS_OBJID) AS DECIMAL) AS YIELD
FROM
dbo.APE_BUSDRIVER_MAIN
WHERE
YEAR_TIME = '2014' AND
APE_AREA_OBJID = 3 AND
ACTIVE = 1
GROUP BY
EMPLOYEE_NAME
ORDER BY
YIELD DESC
Upvotes: 1
Reputation: 1
You don't want to use a subquery at all; the subquery bypasses the where clause and gives you the same result for each employee. I think this is close to giving you what you want:
SELECT
EMPLOYEE_NAME,
CAST(COUNT(APE_BUSDRIVER_STATUS_OBJID) AS DECIMAL)
/
CAST(COUNT(APE_BUSDRIVER_STATUS_OBJID) AS DECIMAL)
AS YIELD,
FROM
dbo.APE_BUSDRIVER_MAIN
WHERE
YEAR_TIME = '2014'
AND APE_AREA_OBJID = 3
AND ACTIVE = 1
GROUP BY EMPLOYEE_NAME
ORDER BY YIELD
DESC
Upvotes: 0