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