如何让我的子查询计算每个员工的按时率,对它们进行分组,然后按描述顺序对它们进行排序?
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
结果:
如您所见,子查询为每位员工提供相同的结果。
这是表FYI:
续...
注意:
APE_BUSDRIVER_STATUS_OBJID:
1 =开启时间
2 =晚于
答案 0 :(得分:1)
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
答案 1 :(得分:0)
您根本不想使用子查询;子查询绕过where子句,并为每个员工提供相同的结果。我认为这很接近你想要的东西:
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