【发布时间】:2014-01-03 21:27:48
【问题描述】:
如何让我的子查询计算每个员工的准时率,对它们进行分组,然后按 Desc 顺序对它们进行排序?
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
结果:
如您所见,子查询为每个员工提供相同的结果。
这是表格仅供参考:
继续...
注意:
APE_BUSDRIVER_STATUS_OBJID:
1 = 准时
2 = 迟到
【问题讨论】:
-
子查询没有引用 EMPLOYEE 表中的任何 ID...这就是问题所在。
-
为什么人们不更多地使用 JOIN?
-
@Nicarus 我如何使用连接??
-
很多时候像这样使用子查询,直接对表使用JOIN或者子查询会好很多,这样可以更好的设置表/集之间的关系。在你的情况下,它实际上看起来你甚至不需要子查询。