SQL 连接不正确

SQL not doing the join correctly

我有一个带有一些 JOIN 条件的 SQL 语句,它对所有条件都工作正常,但不是最后一个,代码如下:

SELECT 
    A.EMPL_CTG, 
    B.DESCR AS PrName, 
    SUM(A.CURRENT_COMPRATE) AS SALARY_COST_BUDGET, 
    SUM(A.BUDGET_AMT) AS BUDGET_AMT, 
    SUM(A.BUDGET_AMT)*100/SUM(A.CURRENT_COMPRATE) AS MERIT_GOAL,
    SUM(C.FACTOR_XSALARY) AS X_Programp, 
    SUM(A.FACTOR_XSALARY) AS X_Program,
    COUNT(A.EMPLID) AS EMPL_CNT, 
    COUNT(D.EMPLID),
    SUM(CASE WHEN A.PROMOTION_SECTION = 'Y' THEN 1 ELSE 0 END) AS PRMCNT,
    SUM(CASE WHEN A.EXCEPT_IND = 'Y' THEN 1 ELSE 0 END) AS EXPCNT, 
    (SUM(CASE WHEN A.PROMOTION_SECTION = 'Y' THEN 1 ELSE 0 END)+SUM(CASE WHEN A.EXCEPT_IND = 'Y' THEN 1 ELSE 0 END))*100/(COUNT(A.EMPLID)) AS PEpercent 
FROM 
    EMP_DTL A INNER JOIN EMPL_CTG_L1 B ON A.EMPL_CTG = B.EMPL_CTG  
    INNER JOIN 
    ECM_PRYR_VW C ON A.EMPLID=C.EMPLID 
    INNER JOIN ECM_INELIG  D on D.EMPL_CTG=A.EMPL_CTG and D.YEAR=YEAR(getdate()) 
WHERE 
    A.YEAR=YEAR(getdate()) 
    AND B.EFF_STATUS='A' 
GROUP BY 
    A.EMPL_CTG, 
    B.DESCR 
ORDER BY B.DESCR

COUNT(D.EMPLID) 返回与 COUNT(A.EMPLID) 相同的值,但我需要 Table D[=20= 的 EMPLID 计数] 在加入条件中,有帮助吗?

COUNT() (and also the other GROUP BY aggregate functions) 不只处理其中一个表中的行。

它们处理 JOIN 生成的所有行。如果没有 GROUP BYJOIN 产生 42 行,那么 COUNT(*)COUNT(1) returns 42COUNT(A.EMPLID)COUNT(D.EMPLID) return 这些列中非 NULL 值的数量。

为了获得从其中一个表中提取的行数,您应该使用 COUNT(DISTINCT)。它忽略 NULL 值以及 JOIN.

产生的重复项

COUNT(D.EMPLID) 更改为 COUNT(DISTINCT D.EMPLID)