2017-05-25 73 views
0

我在我們的ERP系統中有一個跟蹤訂單狀態的表。它具有代碼1-6的開放日期(列名稱ORGDUE_10)和狀態列(STATUS_10),並且狀態3是未決訂單,狀態4已關閉(其餘代碼對此應用無關緊要)。不幸的是,這張表沒有時間戳列,我可以得到訂單關閉時的日期。我需要確定是否按時或者是否超過了截止日期(ORGDUE_10),是否關閉了多個Shop Orders(STATUS_10從3更改爲4)。用於添加時間戳的SQL查詢

任何想法如何我可以做一個查詢,將完成此?我假設我需要另一個表 - 將數據寫入它然後觸發某種類型?

我正在使用VS2015。我無法編輯的表名是Order_Master

STATUS_10  ORDNUM_10 PRTNUM_10  CURDUE_10 
4   | 50015246 |ASY5670 | 9/4/2017 
3   | 50016983 |ASY5699 | 5/15/2017 
+1

基本上,您需要一個記錄結束日期的表格 - 可以修改'表格'來添加合適的列,也可以創建'其他表格'來保存工單號和結束日期,插入到由主表上的觸發器驅動的狀態中,以檢測狀態何時變爲4.請注意,表格具有名稱 - 如果您不能引用真正具有的名稱,則假名(例如SHOP_ORDERS)。無論如何,令人驚訝的是(無論如何),人們提出SQL問題的頻率並不提供表名。 –

+0

@Jonathon Leffler,感謝您的快速回復。我無法編輯的表名是Order_Master。我創建了第二個稱爲SO_Status的表和列狀態(nchar10),CurDue(日期),並添加了Comp_Date(日期)。對於在原始問題中遺漏這些細節,我深表歉意。 –

+0

你並不是唯一缺少這樣的信息 - 這是一個常見的問題。目前我還不確定是否需要幫助來創建觸發器,或者現在創建觸發器時從兩個表中選擇創建SQL。你的樣品數據有'CURDUE_10';你的文字提到'ORGDUE_10'而不是'CURDUE_10'。我認爲你需要爲第二個表提供一些示例數據 - 最好有一些過期的行和一些沒有的行,以及來自'Order_Master'的相應數據。有預期的產出會很有用。 (MCVE - [MCVE])。 –

回答

0

我想通了(我認爲)。這裏是我使用的代碼,似乎可以做到這一點。此代碼將在兩臺不同的服務器上更新,插入和有條件地記錄時間戳(datestamp)兩個不同的表。我希望這是有道理的,並幫助別人。感謝@Jonathan Leffler給予的幫助,對不起,我沒有讓你輕鬆。

MERGE server2.dbo.table2 AS target /* the added server.dbo is in the event the two tables are 
on different sql servers*/ 
USING server1.dbo.table1 AS source ON (target.column-t = source.column-s) /* 
column-t is the target column and column-s is the matching source column */ 
WHEN MATCHED AND (conditional column) AND (antoher conditional column) THEN 
UPDATE SET 
    column-t = source.column-s, column-t (for datestamp) = (GETDATE()) 
WHEN NOT MATCHED AND (conditional column) AND (antoher conditional 
column)THEN  /* you cannot use a WHERE clause in a MERGE but you can set 
up similar conditions in the WHEN statements */ 
INSERT (target columns) 
VALUES (source columns in same order as target columns);