【发布时间】:2022-01-12 18:47:46
【问题描述】:
我目前有两个小查询,我正在尝试将它们结合起来。首先给我一份工作的总预算时间。第二个给了我实际小时数。
当我尝试合并这些时,我使用了两个左连接,结果预算时间过多。我的 group-by 或 join 逻辑出了点问题,但我不确定是哪一个。
--Query for Budget Hours
SELECT bdglin.recnum, --this is jobnum
actrec.jobnme,
SUM(hrsbdg) AS budgethours
FROM bdglin
LEFT JOIN actrec ON actrec.recnum = bdglin.recnum
WHERE actrec.jobtyp = 2
GROUP BY bdglin.recnum, actrec.jobnme
ORDER BY recnum
--Query for Actual hours
SELECT jobcst.jobnum,
actrec.jobnme,
SUM(jobcst.csthrs) AS actualhours
FROM jobcst
LEFT JOIN actrec ON actrec.recnum = jobcst.jobnum
WHERE actrec.jobtyp = 2
GROUP BY jobnum, actrec.jobnme
ORDER BY jobnum
--Failed attempt to combine them, returns like 50,000 hours for a job
SELECT bdglin.recnum,
actrec.jobnme,
SUM(bdglin.hrsbdg) AS BudgetHours,
SUM(jobcst.csthrs) AS ActualHrs
FROM bdglin
LEFT JOIN actrec ON actrec.recnum = bdglin.recnum
LEFT JOIN jobcst ON jobcst.jobnum = bdglin.recnum
WHERE actrec.jobtyp = 2
GROUP BY bdglin.recnum, actrec.jobnme
ORDER BY jobnme
【问题讨论】:
-
最简单的方法是将每个查询用作
derived table,然后将它们连接在一起。 -
第一个查询实际上不是左连接,因为您在 where 中使用列...
-
GROUP BY每个表在一个单独的派生表中。然后加入。
标签: sql sql-server join group-by