0
"Project nr"    "Task"                "Task deadline"  "Task Type Production"

456             pack                  1 april 2013      Pack
456             Leave production      3 april 2013      Leave Production
456             Flight date           9 april 2013      Flight Date

123             pack                  1 april 2013      Pack
123             Leave production      6 april 2013      Leave Production
123             Flight date           9 april 2013      Flight Date

789             pack                  1 april 2013      Pack
789             Leave production      9 april 2013      Leave Production
789             Flight date           9 april 2013      Flight Date

嗨,在我目前的查询下方。我怎样才能将它显示在按休假生产日期排序的三行中,以使它们保持在 3 组中。就像上面一样。项目 ID 编号必须保持在组中,并且必须在休假生产时对组进行排序。

    SELECT MSP_EpmProject_UserView.[Project nr]
    ,max(CASE WHEN [Task Type Production] = 'Packed' THEN [Task deadline] END) AS Pack
    ,max(CASE WHEN [Task Type Production] = 'Leave Production' THEN [Task deadline]
    END) AS [Leave Production]
    ,max(CASE WHEN [Task Type Production] = 'Flight Date' THEN [Task deadline]
    END) AS [Flight Date]

    FROM MSP_EpmProject_UserView LEFT JOIN MSP_EpmTask_UserView ON 
    MSP_EpmProject_UserView.ProjectUID = MSP_EpmTask_UserView.ProjectUID LEFT JOIN
    MSP_EpmAssignment_UserView ON MSP_EpmTask_UserView.TaskUID = 
    MSP_EpmAssignment_UserView.TaskUID LEFT JOIN MSP_EpmResource_UserView ON 
    MSP_EpmAssignment_UserView.ResourceUID = MSP_EpmResource_UserView.ResourceUID 
    WHERE (MSP_EpmTask_UserView.TaskIsProjectSummary = 0) GROUP BY 
    MSP_EpmProject_UserView.[Project nr]
4

1 回答 1

0

您需要使用UNPIVOT如下示例:

SELECT  [Project nr], Task, TaskDate
FROM    (
        SELECT   MSP_EpmProject_UserView.[Project nr]
                ,MAX(CASE   WHEN [Task Type Production] = 'Packed' 
                            THEN [Task deadline] 
                        END) AS Pack
                ,MAX(CASE   WHEN [Task Type Production] = 'Leave Production' 
                            THEN [Task deadline]
                        END) AS [Leave Production]
                ,MAX(CASE   WHEN [Task Type Production] = 'Flight Date' 
                            THEN [Task deadline]
                        END) AS [Flight Date]
        FROM    MSP_EpmProject_UserView 
                LEFT JOIN MSP_EpmTask_UserView 
                    ON MSP_EpmProject_UserView.ProjectUID = MSP_EpmTask_UserView.ProjectUID 
                LEFT JOIN MSP_EpmAssignment_UserView 
                    ON MSP_EpmTask_UserView.TaskUID = MSP_EpmAssignment_UserView.TaskUID 
                LEFT JOIN MSP_EpmResource_UserView 
                    ON MSP_EpmAssignment_UserView.ResourceUID = MSP_EpmResource_UserView.ResourceUID 
        WHERE (MSP_EpmTask_UserView.TaskIsProjectSummary = 0) 
        GROUP BY MSP_EpmProject_UserView.[Project nr]
        ) data
        UNPIVOT
        (
          TaskDate
          for [Task] in ([Pack],[Leave Production],[Flight Date])
        ) piv
ORDER BY    data.[Task deadline]
于 2013-02-19T11:32:16.260 回答