【发布时间】:2015-06-12 14:23:35
【问题描述】:
我有一个带有一些 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 计算 EMPLIDs 的计数,有什么帮助吗?
【问题讨论】:
-
你能分享一些样本数据并解释你想要得到什么结果吗?
-
你遇到了什么错误?
-
COUNT()(以及另一个GROUP BYaggregate functions)不只处理其中一个表中的行。它们处理JOIN生成的所有行。COUNT(A.EMPLID)和COUNT(D.EMPLID)之间的唯一区别在于两列中的NULL值。您应该使用COUNT(DISTINCT D.EMPLID)来获取您需要的值。 -
没有错误,查询运行良好,但作为示例数据,可以说 EMPL_CNT 应该是 42,并且 COUNT(D.EMPLID)=3 ,但查询返回:EMPL_CNT =42 和 COUNT(D.EMPLID)=42
-
axiac,是的,你是对的,感谢您的帮助,工作就像一个魅力
标签: sql-server inner-join