2016-09-19 66 views
0

我有一個表結構,如下所示。 每個工具都有一個家庭。每個工具都可以涉及到幾個家庭。每個家庭可以有幾個工具。按類別查詢的sql查詢總數

| Tool | Family | TPT | 
-------------------------------------- 
| ToolA | FamilyA | TPT1 | 
| ToolA | FamilyB | TPT2 | 
| ToolA | FamilyC | TPT3 | 
| ToolB | FamilyA | TPT4 | 
| ToolB | FamilyB | TPT5 | 
| ToolC | FamilyB | TPT6 | 
| ToolD | FamilyD | TPT7 | 

我要總結的TPT列中的結果可以看出如下─

| Family | TPT   | 
------------------ 
| FamilyA | TPT2+TPT3+TPT5 | 
| FamilyB | TPT1+TPT3+TPT4 | 
| FamilyC | TPT1+TPT2  | 
| FamilyD | 0    | 

解釋結果FamilyA有ToolA和ToolB。 ToolA與FamilyB(TPT2),FamilyC(TPT3)和FamilyA本身有關。 ToolB與FamiltyA本身和FamilyB(TPT5)有關。所以FamilyA的TPT是TPT2 + TPT3 + TPT5。 FamilyB和FamilyC一樣。 FamilyD只有ToolD。 ToolD與其他家庭無關。因此FamilyD的TPT爲0. 我該如何編寫一個sql查詢來檢索符合上述表結構的結果?

+0

你有沒有試圖編寫代碼來解決這個問題? – dfundako

+0

我需要在sql查詢 –

+1

哪個rdbms?你嘗試了什麼?你會得到什麼錯誤?你是否搜索過(通過SO搜索和谷歌)?在這個問題上有很多類型的問題......至少應該有一個解決你的問題。 – swe

回答

0

希望它會爲你工作,因爲我沒有測試過:

SELECT a.family, coalesce(sum(b.tpt), 0) AS total 
FROM tbl AS a 
LEFT JOIN tbl AS b ON a.tool = b.tool AND a.family != b.family 
GROUP BY a.family 
+0

您頂部的列名是不明確的,您將獲得D系列而不是0系列的NULL,但其他方面看起來與我的相同 – kbball

+0

已修復。感謝您的建議...... :) –

0

這裏是另外一個,就是多一點精確:這裏測試

SELECT t1.family, coalesce(SUM(t2.tpt),0) 
FROM t t1 
LEFT JOIN t t2 
ON t1.tool = t2.tool 
AND t1.family <> t2.family 
GROUP BY t1.family 

http://sqlfiddle.com/#!9/a0dca/7