2013-09-23 30 views
1

在此先感謝您的幫助。根據另一個表中的信息更新同一SQL表中的一行 - MSSQL

我有兩個表,一個參考表和一個細節表。參考表列出了與下一個步驟配對的順序的當前生產步驟,因爲這樣:

參考表

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 

在此表中,訂單的每個步驟都存在,但具有空白開始日期和計劃結束日期。

我試圖建立一個查詢:

  • 查找具有當今的一個完整的日期每個項目
  • 找到NEXT_STEP與該項目相關聯在表中的同一Order_ID上
  • 如果起始日期爲空白,更新START_DATE到今天,並增加了Planned_Duration天開始日期計算Planned_End日期

我能夠做到的它的部分individ理想情況下,但我很難將它們彙集到一個查詢/存儲過程中。

我很欣賞任何指向正確的方向。

再次感謝!

回答

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 
+0

的問題是標籤與SQL Server 2005,所以你不能用'DATE'數據類型 – Lamak

+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和下一步正..過濾它們,因爲你需要

這裏我說給我的訂單上一步完成且下一步未啓動。我認爲;)

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; 
相關問題