【发布时间】:2023-03-24 13:44:01
【问题描述】:
我有一个问题,我从两个表中进行选择,如下所示:
select SUM(tc.WEEKLY_HOURS),
SUM(pc.var_cash)
from time_capture tc
LEFT OUTER JOIN PAYMENT_CAPTURE pc on tc.EMP_NO = pc.emp_no
AND tc.EFFECTIVE_DATE = pc.EFFECTIVE_DATE
where tc.effective_date = '17 June, 2012'
GROUP BY LEFT(tc.COST_CENTRE, 4)
这两个表包含:
time_capture
emp_no EFFECTIVE_DATE weekly_hours
---------- ----------------------- ----------------------
1234 2012-06-17 28
PAYMENT_CAPTURE
emp_no EFFECTIVE_DATE INPUT_CODE cost_centre var_cash
---------- ----------------------- ---------- ------------------------- ----------------------
1234 2012-06-17 KEY 5607.03 45
1234 2012-06-17 OTHER 5607.03 19.23
我期待sum(weekly_hours) 返回 28,但由于(我认为)payment_capture 中的两行,它返回 56(下)。
有人能指出我在这方面的正确方向吗?
非常感谢。
weekly_hours var_cash
---------------------- ----------------------
56 64.23
【问题讨论】:
-
你为什么使用像
'17 June, 2012'这样的日期文字?请使用不受 SQL Server 基于语言和其他设置的不同解释的明确格式。'20120617'更安全。 -
在不了解系统设计的情况下,很难知道这是否是正确的方法,但根据我们所知道的情况,您应该使用子查询来汇总 payment_capture 中的数据,然后在 time_capture 的外部查询中加入子查询。
-
如果当天有两名员工有时间,您希望结果如何? time_capture 表中的 emp_no / Effective_date 组合是否可以有两行?
标签: sql sql-server join left-join