1

在此先感谢您的帮助。

我有两个表,一个参考表和一个详细信息表。参考表列出了与下一步配对的订单的当前生产步骤,如下所示:

参考表

Current_Step      | Next_Step          |  ID
-------------------------------------------------
Step 1            | Step 2             | 1
Step 2            | Step 3             | 2
Step 3            | Step 4             | 3

我还有一个订单明细表:

Order_ID  | Step_ID  | Start_Date | Planned_End | Complete_Date | Planned_Duration
-----------------------------------------------------------------------------------
1000      | 1        | 1/1/2013   | 1/3/2013    | 1/3/2013      | 2
1000      | 2        |            |             |               | 3
1000      | 3        |            |             |               | 8

在此表中,订单的每个步骤都存在,但有一个空白的开始日期和计划的结束日期。

我正在尝试构建一个查询:

  • 查找具有今天完整日期的每个项目
  • 查找与表中相同 Order_ID 的该项目关联的 Next_Step
  • 如果 Start_Date 为空,则将 Start_Date 更新为今天,并将 Planned_Duration 天数添加到开始日期以计算 Planned_End 日期

我可以单独完成其中的一部分,但我很难将它们全部整合到一个查询/存储过程中。

我将不胜感激任何正确方向的指示。

再次感谢!

4

3 回答 3

0

我会从这样的事情开始:

 select 
    n.orderId
 from
    refernce_table as r
    inner join order_details as p
        on r.current_step = p.step_id
    inner join order_details as n
        on r.next_step = n.step_id
 where 
     p.complete_date is not null
     and n.start_date is null

这为您提供了前面的步骤 p 和后面的步骤 n .. 根据需要过滤它们

在这里我是说给我上一步完成但没有开始下一步的命令。我想 ;)

于 2013-09-23T20:17:01.937 回答
0
declare @Today datetime

select @Today = dateadd(dd, datediff(dd, 0, getdate()), 0)

update od2 set
    start_date = @Today,
    planned_end = dateadd(dd, od2.planned_duration, @Today)
from order_details as od
    inner join reference_table as rt on rt.current_step_id = od.step_id
    inner join order_details as od2 on od2.order_id = od.id and od2.step_id = rt.next_step_id
where
    od.complete_date = @Today and od2.start_date is null
于 2013-09-23T20:22:37.997 回答
0

试试这个(对于 SQL Server 2005):

UPDATE  n SET
        Start_Date =  CONVERT(VARCHAR, GETDATE(),112),
        Planned_end = DATEADD(dd, n.Planned_Duration,  CONVERT(VARCHAR, GETDATE(),112))
FROM    order_details AS d
JOIN    refernce_table AS r ON d.step_id= r.ID
JOIN    order_details AS n ON n.step_id = CONVERT(int, REPLACE(r.Next_Step, 'Step ',''))
AND     d.order_id = n.order_id
WHERE   d.Complete_Date =  CONVERT(VARCHAR, GETDATE(),112)
AND     N.Start_date is null;
于 2013-09-23T20:32:06.233 回答