我正在编写一个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
对数据进行分组
答案 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