提前感谢您的帮助。
我有两个表,一个参考表和一个详细信息表。参考表列出了与下一步配对的订单的当前生产步骤,如下所示:
参考表
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
在此表中,订单的每个步骤都存在,但具有空白的开始日期和计划的结束日期。
我正在尝试构建一个查询:
我可以单独完成部分内容,但是我很难将它们整合到一个查询/存储过程中。
我很欣赏任何正确方向的指示。
再次感谢!
答案 0 :(得分: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 ..根据需要过滤它们
这里我说的是给我上一步完成的订单,下一步没有开始。我认为;)
答案 1 :(得分: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
答案 2 :(得分: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;