SQL查询按工作流标准对数据进行分组

时间:2015-10-12 21:45:56

标签: sql sql-server

我正在编写一个SQL查询来查看一些项目指标 我有2张桌子。

WorkflowDefinition (In this the workflow definition is according to the   product land and is different for different productLaneID)
ProductLaneID | StepID | StepName | WorkflowRevisionID
4               1        RA         1
4               2        Design     1
4               3        ME         1
4               4        Tooling    1
4               5        Waiting    1
4               6        Manuf      1
4               7        Completed  1
5               1        RA         1
5               2        Concepts   1
5               3        Design     1
5               4        ME         1
5               5        Tooling    1
5               6        Waiting    1
5               7        Manuf      1
5               8        FieldTesting1
5               9        Completed  1

在此,我想参加俱乐部

 Step 3&4 from ProductLaneID=4 as PLES
 StepID 5&6 from ProductLaneID = 4 as Manuf

StepID 2&3 from productLaneID =5 as Design
StepID 4&5 from productLaneID =5 as PLES
StepID 6&7 from productLaneID =5 as Manufacturing


ProjectScheduleHistory
ProjectID|FromStepID|ToStepID|EnteredStepDate|ExitedStepDate

现在一个项目可以从步骤1-2和2-1再到1-2 所以我想找到初始步骤日期和步骤退出的最后日期。 因此,它将根据Design,PLES和Manuf

计算每个步骤中的天数

结果就像

ProjectID | Design CompletionDate | Days in Design| PLES Comp Date | Days in PLES| Manuf Comp Date | No of Days in Manuf.

我已经开始使用以下sql查询。

select ProjectID,FromStepID,ToStepID,
[EnteredStepDate] = MIN(EnteredStepDate),
[ExitedStepDate] = MAX(ExitedStepDate),ProjectLaneID,
[DaysInStep] = SUM(DATEDIFF(DAY,EnteredStepDate,ExitedStepDate)),
REPLACE(REPLACE(REPLACE(REPLACE(StepName,'Manufacturing             Engineering','PLES'),'Tooling','PLES'),'Concept','Design'),'Waiting On   Order','Manufacturing')StepName
from lovWorkflowDefinition
left outer join dtaProjectScheduleHistory
on FromStepID = StepID
where (StepName = 'Design' or StepName = 'PLES' or StepName =  'Manufacturing') and (ProjectLaneID=4 or ProjectLaneID=5)
group by   ProjectID,FromStepID,ToStepID,EnteredStepDate,ExitedStepDate,ProjectLaneID,StepName

我想根据Design,PLES和Manuf

对数据进行分组

1 个答案:

答案 0 :(得分:1)

使用条件CASE/WHEN语句和派生表子查询来考虑以下内容:

SELECT ProjectID, Max([Step Name]) As [StepName],
       Max(CASE WHEN [Step Name] = 'Design' THEN ExitedStepDate END) As [Design Comp Date],
       Sum(CASE WHEN [Step Name] = 'Design' 
                THEN DATEDIFF(DAY, EnteredStepDate, ExitedStepDate) END) AS [Days in Design],

       Max(CASE WHEN [Step Name] = 'Ples' THEN ExitedStepDate END) As [PLES Comp Date],
       Sum(CASE WHEN [Step Name] = 'Ples' 
                THEN DATEDIFF(DAY, EnteredStepDate, ExitedStepDate) END) AS [Days in Design],

       Max(CASE WHEN [Step Name] = 'Manuf' THEN ExitedStepDate END) As [Manuf Comp Date],
       Sum(CASE WHEN [Step Name] = 'Manuf' 
                THEN DATEDIFF(DAY, EnteredStepDate, ExitedStepDate) END) AS [Days in Design],
FROM 
   (SELECT proj.ProjectID, proj.FromStepID, proj.ToStepID, 
           proj.EnteredStepDate, proj.ExitedStepDate,
           CASE 
             WHEN proj.StepID IN (3, 4) AND work.ProductLaneID = 4 THEN 'Ples'
             WHEN proj.StepID IN (5, 6) AND work.ProductLaneID = 4 THEN 'Manufacturing'
             WHEN proj.StepID IN (2, 3) AND work.ProductLaneID = 5 THEN 'Design'
             WHEN proj.StepID IN (4, 5) AND work.ProductLaneID = 5 THEN 'Ples'
             WHEN proj.StepID IN (6, 7) AND work.ProductLaneID = 5 THEN 'Manufacturing'
           END  As [Step Name]
   FROM WorkflowDefinition work
   LEFT OUTER JOIN ProjectScheduleHistory proj
   ON wrk.StepID = proj.FromStepID
   ) As dT
GROUP BY ProjectID