2

タスクごとに1人あたりに費やした時間のログを取得するクエリを作成しようとしています。

私は次のテーブルを持っています:

  • 次の列を持つログテーブル:TaskID、PersonID、Hours
  • 列を持つメンバーテーブル:ID、名前、電子メール、Skype、メモ

最終的に、ログは次のようになります。

| Person1 | Task1 | x hours |
| Person1 | Task2 | x hours |
| Person2 | Task1 | x hours |

したがって、人とタスクの両方でグループ化する必要があります。

それは私に問題を与えている合計時間です。

これまでのところ、これは私が持っているものです:

SELECT m.Name, t.Task, Sum(l.Hours) AS TotalHours
FROM Member AS m, Log AS l, Tasks AS t
WHERE t.TaskID=l.TaskID
GROUP BY t.Task, m.Name;

ただし、これにより、固有の個人とタスクの組み合わせのリストが得られますが、そのタスクに費やされた時間の合計は、1人あたりのそのタスクに費やされた合計時間ではありません。

うまくいけば、あなたが私を助けることができるように、私は問題を十分に明確に説明しました。

よろしくお願いします。

4

2 に答える 2

3

条項Member table内に自分を含めることができます。where

したがって、SQLクエリLog tableも含まれている場合は次のようになります:-MemberId

Select m.Name, t.Task, Sum(l.Hours) As TotalHours
From Member AS m, Log AS l, Tasks AS t
WHERE t.TaskID=l.TaskID and m.MemberId=l.MemberId
GROUP BY t.Task, m.Name

これにより、必要な結果が得られるはずです。

編集 :

暗黙的な結合ではなく明示的な結合を使用したい場合、クエリは次のようになります:-

Select m.Name, t.Task, Sum(l.Hours) As TotalHours
From Log AS l
Inner join tasks AS t
On t.TaskID=l.TaskID
Inner join Member AS m
On m.MemberId=l.MemberId
GROUP BY t.Task, m.Name

クエリがかなり大きく、明示的結合が読みやすいため、通常は明示的結合を使用します。効率などについてはよくわかりません。

于 2012-11-19T13:55:03.390 に答える
1

メンバーテーブルにも参加する必要があります。投稿された例では、ログとタスクのテーブルにのみ参加しています。

メンバーのテーブルにあるものについてさらに情報を提供していただければ、喜んでお手伝いさせていただきます。

于 2012-11-19T13:30:00.207 に答える