0

簡単に答えられるはずの質問があります...

というテーブルがありProjects、主キーはProjectIdです。

2 番目のテーブルは と呼ばれProjectResourcesProjectId外部キーとして、ユーザーと時間のフィールドが追加されます (プロジェクトで作業するように割り当てられたユーザーを表します)

3 番目のテーブルはTimesheetEntries(ユーザーがプロジェクトに実際に取り組んだ時間を記録するためにユーザーが使用する)、ProjectId外部キーとして、およびフィールドUser

projectId,BudgetedHours必要なのは、 (ProjectResourcesテーブルから) とActualHours(テーブルから)のレコードを表示することTimesheetEntriesです。ただし、次の場合を含めたいと思います。

  1. ユーザーがプロジェクトに割り当てられましたが、そのプロジェクトで作業しませんでした (この場合、予算時間には値があり、実際の時間はゼロである必要があります)。

  2. ユーザーはプロジェクトに割り当てられていませんが、プロジェクトに取り組んでいます (この場合、BudgetedHours はゼロで、ActualHours には値が必要です)。

  3. ユーザーがプロジェクトに割り当てられており、プロジェクトに取り組んでいます (BudgetedHours と ActualHours の両方に値があります)。

この種の結果を得るために、誰かが T-SQL ステートメントを教えてくれませんか?

4

2 に答える 2

0

問題が発生しているのは、プロジェクトに割り当てられているため、実際の時間と予算時間はすべて基本的に等しいと考えているためだと思います。

ただし、実際の計算方法と予算の計算方法は大きく異なります。次の例のように、個別のサブクエリを使用してそれらを計算する必要があります。

select coalesce(budget.ProjectId, actual.ProjectId) as ProjectId,
       budget.BudgetedHours, actual.ActualHours
from 
(
  select projectid, sum(pr.hours) as BudgetedHours
  from Projects p 
  left outer join ProjectResources pr
) budget 
full outer join
(
  select projectid, sum(tse.hours) as ActualHours
  from  Projects p 
  left outer join TimeSheetEntries tse
     on tse.ProjectId = p.ProjectId
) actual
  on budget.ProjectId = actual.ProjectId
于 2012-05-10T14:43:00.457 に答える