Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL查询按工作流条件对数据进行分组_Sql_Sql Server - Fatal编程技术网

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

我正在编写一个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         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外,所有列都被删除。