Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 两个表中两列的总和_Sql - Fatal编程技术网

Sql 两个表中两列的总和

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

我试图得到两列的总和,但它似乎加错了。我有一张临时的临时表和另一张叫做“工作时间”的表

在#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       |  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秒内:(