SQL Sum第三个表的元素,基于另外两个ID

时间:2015-09-04 21:57:42

标签: sql sql-server ssms

我有三个SQL表,包含我称之为项目项目,项目项目和添加到项目项目的小时数。在简单的连接语句之后,我有以下内容:

Project.id     Item_num
1              1
1              2
1              3
2              1
etc

使用

等查询
SELECT dbo.Project.id
, dbo.Item.item_num
FROM dbo.Project
JOIN dbo.Item
ON Project.id = Item.id

请注意项目表和项目表之间有相应的ID。我现在需要在item_num列的右侧添加第三个表中的小时数。第三个表格如下所示(我称之为小时):

Employee name     Project.id     Item_num         Hours
ID 1              1              1                2
ID 2              1              1                1

我想得到的结果是:

Project.id     Item_num          Hours Total
1              1                 3
etc

我知道我需要一些伪代码,如下所示: SUM(小时)AS总小时数 如果dbo.Project.id = dbo.Hours.Project.id AND dbo.Item.Item_num = dbo.Hours.Item_num 在查询中实现此功能的最佳方法是什么?预先感谢您对SQL nooby的任何帮助。

2 个答案:

答案 0 :(得分:0)

我认为你需要这样的东西。

我确定您的示例中的某些列名称有误。 例如Hour字段Project.ID我将其重命名为ProjectID

SELECT P.id, I.item_num, SUM(H.Hours)
FROM dbo.Project P
INNER JOIN dbo.Item I
    ON P.id = I.id
INNER JOIN dbo.Hours H
    ON H.Item_num = I.Item_num
   AND H.ProjectID = P.ID
GROUP BY P.id, I.item_num

答案 1 :(得分:0)

SELECT dbo.Project.id
     , dbo.Item.item_num
     , sum(Hours) as Hours
FROM dbo.Project
JOIN dbo.Item
ON   Project.id = Item.id
JOIN dbo.Hours
ON   Project.id = Hours.projectid  -- <-- your name here
GROUP BY dbo.Project.id
       , dbo.Item.item_num

这就是我想你想要的。

包含SUM()之类的聚合的规则是GROUP BY重复任何非聚合名称。在这里,您需要按项目和时间进行数小时项目。