Sql 两个表中两列的总和
我试图得到两列的总和,但它似乎加错了。我有一张临时的临时表和另一张叫做“工作时间”的表 在#temp中: 工时表:Sql 两个表中两列的总和,sql,Sql,我试图得到两列的总和,但它似乎加错了。我有一张临时的临时表和另一张叫做“工作时间”的表 在#temp中: 工时表: emplyID | hours | projID | date 3 | 4 | 5 | 2015-06-02 9 | 3 | 5 | 2015-06-03 2 | 3 | 5 | 2015-01-01 5 | 5 | 5 | 2015-02-02 2
emplyID | hours | projID | date
3 | 4 | 5 | 2015-06-02
9 | 3 | 5 | 2015-06-03
2 | 3 | 5 | 2015-01-01
5 | 5 | 5 | 2015-02-02
2 | 3 | 5 | 2015-01-01
5 | 5 | 5 | 2015-02-02
3 | 4 | 5 | 2015-06-02
9 | 3 | 5 | 2015-06-03
这就是我所尝试的:
select c.FirstName, a.employeeID, a.hours as workHours, b.hours as
tempWorkHours, a.hours+b.hours as totalHours, a.date
from workHours as a, #temp as b, employee as c
where a.employeeID=c.employeeID and a.employeeID=b.employeeID
然而,这似乎是从第一张桌子抓取第一个小时,并将其添加到第二张桌子上的每小时,然后从第二张桌子抓取第二个小时,反之亦然
预期结果应为,例如:
emplyID | hours
2 | 12
3 | 16
5 | 20
9 | 12
我怎样才能解决这个问题?非常感谢。您可以使用逗号(,)连接生成延迟的笛卡尔乘积
SELECT SUM(A.HOURS+B HOURS) FROM TEMP AS A JOIN WORKTABLE AS B ON A.EMPID = B.EMPID
在
#temp
和工作时间之间存在部分交叉连接。我猜你会想做这样的事情:
select c.FirstName,
a.employeeID,
a.hours as workHours,
b.hours as tempWorkHours,
a.hours + b.hours as totalHours,
a.date
from workHours as a
inner join #temp as b
on a.employeeID = b.employeeID
and a.projID = b.projID
and a.date = b.date
inner join employee as c
on a.employeeID = c.employeeID
现在,我无法确切地知道在工作时间
和临时工作时间
之间需要连接哪些字段。我也无法知道你是否需要外部连接。我还猜测您当前查询的期望输出
最后,避免使用逗号连接。这是一种老语法,大多数人觉得很难理解
编辑:根据您更新的预期输出,我将尝试以下方法:
select c.FirstName,
a.employeeID,
sum(a.hours + b.hours) as totalHours,
from workHours as a
inner join #temp as b
on a.employeeID = b.employeeID
and a.projID = b.projID
and a.date = b.date
inner join employee as c
on a.employeeID = c.employeeID
group by a.employeeID,
c.FirstName
我认为你缺少加入条件
SELECT
c.FirstName,
a.employeeID,
SUM(a.hours) as workHours,
SUM(b.hours) as tempWorkHours,
SUM(a.hours+b.hours) as totalHours,
a.date
FROM workHours as a
OUTER JOIN #temp as b ON a.employeeID=b.employeeID AND a.date = b.date
INNER JOIN employee as c ON a.employeeID=c.employeeID AND a.date = c.date
GROUP BY a.employeeID
如果您的员工id不够唯一,因此每个列都有一个唯一的配对,则添加更多的加入条件
编辑:进一步的联接条件您需要使用全部联合
而不是内部联接
SELECT
c.FirstName,
a.employeeID,
SUM(a.hours) as workHours,
SUM(b.hours) as tempWorkHours,
SUM(a.hours+b.hours) as totalHours,
a.date
FROM workHours as a
OUTER JOIN #temp as b ON a.employeeID=b.employeeID AND a.date = b.date
INNER JOIN employee as c ON a.employeeID=c.employeeID AND a.date = c.date
GROUP BY a.employeeID
select emplyID,sum(totalHours)
From
(
select emplyID,
hours as totalHours
from workHours as a
union all
select emplyID,
hours as totalHours
From #temp as b
) a
Group by emplyID
预期结果是什么?您正在从3个表中提取哪一个DBMSY,但只列出了2个?即使语句中的列名和列出的表中的列名都不同,您也不应该使用隐式联接样式。切换到显式join
syntax(自1992年以来一直是标准语法!)。也尝试在date上加入,并且是否检查了row_number函数以从第二个表中获取不同的行?这仍然是从第一个表中获取第一个小时,并将其全部添加到第二个表中的小时,从第一个表中获取第二个小时,并将其添加到第二个表模式中的小时:[@vanillacoke9191在看到同一个表中有多个ID并且它们不是主键之后,我编辑了我的答案。在第一个表和第二个表中也有不相同的日期=X@vanillacoke9191您应该可以使用外部联接来修复此问题…但是我不知道您的表的确切规格,所以结果仍然不确定,因此需要在其他小时字段中求和oopsMy total hours在此查询的1000秒内关闭:(您仍然需要在日期后加入c,否则它将过度加入a->c@EastonBornemeier-您如何知道Employee表中有日期
。从逻辑上讲,它对当前上下文没有意义..为什么有人会在Employee表中存储工作时间日期试图从逻辑上理解过度加入的原因--我们没有提供那张桌子的格式我是黑拳击it@vanillacoke9191-现在检查..添加的时间总和似乎在1000秒内:(