2016-09-19 46 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 | 

私は結果に見られるように検索結果 - FamilyAため

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

説明はToolAとToolBを持ってbelow- TPT列を合計します。 ToolAは、ファミリーB(TPT2)、ファミリーC(TPT3)およびファミリーA自体に関連する。 ToolBはFamiltyA自体およびFamilyB(TPT5)に関連しています。ファミリーAのTPTはTPT2 + TPT3 + TPT5です。ファミリーB、ファミリーCと同じです。 FamilyDにはToolDしかありません。 ToolDは他のファミリとは関係ありません。ですから、FamilyDのTPTは0です。 上記のテーブル構造に基づいてこれらの結果を取得するSQLクエリを作成するにはどうすればよいですか?

+0

あなたはこの問題を解決するコードを書こうとしましたか? – dfundako

+0

私はSQLクエリでそれを行う必要があります –

+1

どのrdbms?何を試しましたか?どのようなエラーが出ますか?あなたはSOを検索しましたか(SO検索とGoogleを介して)?あなたにはこのタイプの質問がたくさんあります。あなたの質問を解決する少なくとも1つの質問があります。 – 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