2013-02-19 34 views
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 

嗨,低于我目前的查询。我怎样才能按照他们三人一组的方式,按照生产日期排序的三行显示它。像上面一样。 p [项目身份证号码必须留在小组中,并且小组可以在产假时分类。在日期组排序

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] 

回答

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] 
+0

@Anne已答复更新,包括UNPIVOT一步 – twoleggedhorse 2013-02-19 12:14:30

+0

嗨,尝试过,但我一条一条地拿到订单上的错误:消息1033,级别15,状态1,行25 除非还指定了TOP或FOR XML,否则ORDER BY子句在视图,内联函数,派生表,子查询和公用表表达式中无效。 – Anne 2013-02-19 15:01:39

+0

@Anne更新回答 - 尝试移动ORDER BY,使其位于主查询之外。 – twoleggedhorse 2013-02-19 15:16:10