SQL查询按工作流条件对数据进行分组
我正在编写一个SQL查询来查看一些项目指标 我有两张桌子SQL查询按工作流条件对数据进行分组,sql,sql-server,Sql,Sql Server,我正在编写一个SQL查询来查看一些项目指标 我有两张桌子 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
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
所以我想找到第一步进入的日期和最后一步退出的日期。
因此,它将根据设计、PLES和制造计算每个步骤的天数
结果是
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
我想根据设计、PLES和制造对数据进行分组
.使用条件
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
语法看起来像SQL Server,所以我为您删除了无关的数据库标记。嗨,Parfait,谢谢您的输入。我可以做到这一点。感谢你的努力。现在我想修改它来处理更多的情况,比如若项目从第3步直接转到第7步,那个么我们如何处理这种情况。这同样适用于其他步骤。查询应该仍然有效。从我收集的资料来看,
ProjectScheduleHistory
表维护了FromStepID
和ToStepID
。所以只需将3和7的新记录添加到表中,并通过StepID
查询连接到WorkflowDefinition
表中即可。除非出现[Step Name]
的新条件,否则在派生表中添加一个额外的CASE/WHEN
语句。Hi Parfait,因为我们在做WorkflowDefinition工作,所以在外部联接ProjectScheduleHistory时,每个ProjectLaneID都会得到一行,这是不需要的。我们只需要在projScheduleHistory中为from查询添加一个带有StepName的列。我们只需要ProjectScheduleHistory中基于新工作流定义的数据。您可以在派生表中添加一个WHERE
子句条件,以过滤结果记录。因此,添加定义新WorkflowDefinition的内容。对于[步骤名称]
,将其添加到select和group by lines中的外部主查询中。请参见编辑。执行此操作时,除ProjectID外,所有列都被删除。