SQL Server聚合查询,行和列

时间:2014-07-14 11:17:22

标签: sql sql-server pivot

我有以下表格:

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。

0 个答案:

没有答案