我有以下表格:
Project
Task
Note
Employee
每个项目都有一个或多个任务。每个任务都有一个或多个注释。每位员工都有一个或多个笔记。每个表都有自己的ID和相关记录的ID,即:
Project.ID
Task.ID
Task.ID_Project
Note.ID
Note.ID_Task
Note.ID_Employee
Note.Duration
Employee.ID
另外Note有一个Note.Duration字段,它是一个实数,用于指定给定注释的给定任务的处理时间。
现在我想要的东西(或者更确切地说是我要求的信息)是Excel中的一个表格,其中项目列表为行标题,员工列表为列标题,每个单元格包含每位员工工作的总时间在给定的项目上。我不确定如何在SQL Server(2008)中构建这样的查询。我开始使用给定项目的聚合查询,例如:
SELECT Employee.ID,
InnerNotes.Duration
FROM
Employee
LEFT OUTER JOIN
(SELECT Employee.ID,
SUM(Note.Duration) AS Duration
FROM
Employee
INNER JOIN
Note
ON
Note.ID_Employee = Employee.ID
INNER JOIN
Task
ON
Note.ID_Task = Task.ID
INNER JOIN
Project
ON
Task.ID_Project = Project.ID
WHERE
Project.ID = N'8BC3447F-441D-4E73-B76B-C1304F36841D'
GROUP BY
Employee.ID)
AS
InnerNotes
ON
InnerNotes.ID = Employee.ID
因此,此查询将为我提供一组包含Employee.ID的行以及项目8BC3447F-441D-4E73-B76B-C1304F36841D的总持续时间。我真正想要的是所有员工的任何项目的总持续时间,更像是:
Bob Fred Jim
Widget Making 1 1 2 5
Widget Making 2 - 4 -
Widget Making 3 2 - -
我不是DBA,所以没有太多的SQL经验。有人可以帮助我吗?
编辑:顺便说一下,我正在使用SQL Server 2012。