2015-09-04 55 views
1

我有三個SQL表格,其中包含我稱之爲項目項目的項目,項目項目和小時數的內容。經過簡單連接聲明我有以下幾點:SQL總結基於另外兩個ID的第三個表格的元素

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總小時數 IF dbo.Project.id = dbo.Hours.Project.id AND dbo.Item.Item_num = dbo.Hours.Item_num 在查詢中實現此操作的最佳方式是什麼?預先感謝任何對SQL nooby的幫助。

+0

Hello Bird歡迎來到StackOverflow,下次嘗試提供 [** SqlFiddle **](http://sqlfiddle.com/#!15/5368b/6),這樣我們就可以更好地理解問題並給你答案 快得多 - 也請閱讀[**如何問**](http://stackoverflow.com/help/how-to-ask) 和[**如何創建一個最小,完整和可驗證的例如。**](http://stackoverflow.com/help/mcve) –

+0

我在這裏看到的問題是數據庫架構不清楚。更好的描述會節省很多時間。 –

回答

0

我認爲你需要這樣的東西。

我敢肯定你的示例列名是錯誤的。 例如HourProject.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 
+0

謝謝你的迴應。他們幫助我確保我朝着正確的方向前進,幾乎是我所需要的100%。在我的特定實現中,我必須做出的唯一小改變是第二次加入聲明中的左外連接,因爲並非所有項目都有小時。除此之外,這是完美的。謝謝! – Birdmanhoo

+0

很高興幫助您,請考慮接受我的回答,並在您有權利時加註。 –

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重複任何非聚合名稱。在這裏您需要項目&項目的小時數。

+0

你好詹姆斯。我不明白代碼註釋「你的名字在這裏」可能是一個錯字?另外,我認爲查詢需要在第二次連接中包含'projectID',否則一個項目中的所有項目都會添加到其他項目中。 –

相關問題