Sql 子查询计算
如何让我的子查询计算每个员工的工时率,对他们进行分组,然后按描述顺序对他们进行排序Sql 子查询计算,sql,subquery,Sql,Subquery,如何让我的子查询计算每个员工的工时率,对他们进行分组,然后按描述顺序对他们进行排序 SELECT EMPLOYEE_NAME AS EMPLOYEE, ( SELECT ( SELECT CAST(COUNT(APE_BUSDRIVER_STATUS_OBJID) AS DECIMAL) FROM dbo.APE_BUSDRIVER_MAIN
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\u总线驱动器\u状态\u对象:
1=准时
2=LATE您根本不想使用子查询;子查询绕过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
子查询未引用EMPLOYEE表中的任何ID。。。这就是问题所在。为什么人们不更多地使用联接?@Nicarus我如何使用联接来实现这一点?很多时候,像这样使用子查询时,最好直接使用表联接或子查询联接,以便更好地设置表/集之间的关系。在您的情况下,实际上似乎您甚至不需要子查询。您总是会得到1作为结果。我得到这个错误:“Msg 102,15级,状态1,第3行,靠近''的语法不正确。”
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