Mat*_*nes 2 sql t-sql sql-server
项目有多个任务,具有多个任务
项目(1-n) - >任务(1-n) - >作业
"任务"表上的字段是"计划时数".
"分配"表上的字段为"分配小时".
如何在单个查询中获取所有项目的计划时间和分配时间?
编辑:这个答案给出了不正确的结果,但我将其用于历史目的.
我想这会帮助你.我无法弄清楚如何摆脱Distinct它.
Select Distinct
Project.ProjectId,
Sum(Task.PlannedHours)
Over (Partition By Project.ProjectId) As PlannedHours,
Sum(Assignment.AssignedHours)
Over (Partition By Project.ProjectId) As AssignedHours
From Project
Inner Join Task On Project.ProjectId = Task.ProjectId
Inner Join Assignment On Task.TaskId= Assignment.AssignmentId
Run Code Online (Sandbox Code Playgroud)
这是我的测试脚本.
Declare @Project Table (ProjectId Int)
Declare @Task Table (TaskId Int, ProjectId Int, PlannedHours Int)
Declare @Assignment Table (AssignmentId Int, TaskId Int, AssignedHours Int)
Insert Into @Project (ProjectId) values (1)
Insert Into @Project (ProjectId) values (2)
Insert Into @Project (ProjectId) values (3)
Insert Into @Task (TaskId, ProjectId, PlannedHours) values (1, 1, 10)
Insert Into @Task (TaskId, ProjectId, PlannedHours) values (2, 1, 10)
Insert Into @Task (TaskId, ProjectId, PlannedHours) values (3, 2, 11)
Insert Into @Task (TaskId, ProjectId, PlannedHours) values (4, 3, 12)
Insert Into @Assignment (AssignmentId, TaskId, AssignedHours) values (1, 1, 2)
Insert Into @Assignment (AssignmentId, TaskId, AssignedHours) values (2, 1, 2)
Insert Into @Assignment (AssignmentId, TaskId, AssignedHours) values (3, 2, 2)
Insert Into @Assignment (AssignmentId, TaskId, AssignedHours) values (4, 3, 3)
Select Distinct
Project.ProjectId,
Sum(Task.PlannedHours)
Over (Partition By Project.ProjectId) As PlannedHours,
Sum(Assignment.AssignedHours)
Over (Partition By Project.ProjectId) As AssignedHours
From @Project Project
Inner Join @Task Task On Project.ProjectId = Task.ProjectId
Inner Join @Assignment Assignment On Task.TaskId= Assignment.AssignmentId
Run Code Online (Sandbox Code Playgroud)
select p.ProjectID, t.PlannedHoursSum, a.AssignedHoursSum
from Projects p
inner join (
select ProjectID, sum(PlannedHours) as PlannedHoursSum
from Tasks
group by ProjectID
) t on p.ProjectID = t.ProjectID
inner join (
select t.ProjectID, sum(AssignedHours) as AssignedHoursSum
from Tasks t
inner join Assignments a on t.TaskID = a.TaskID
group by t.ProjectID
) a on p.ProjectID = a.ProjectID
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1293 次 |
| 最近记录: |