對不起,如果之前已經詢問過這個或類似的東西,但我一直在尋找一段時間,找不到任何答案或線索。基於第二張表在MS SQL 2008中插入/更新記錄,然後保持日期一致
所以,我有兩個表,看起來像這樣的數據:
表A
PK START STOP DATA
1 1/1/2013 12/31/2013 AAA
1 1/1/2014 12/31/2014 AAA
2 1/1/2013 12/31/2013 BBB
2 1/1/2014 12/31/2014 BBB
表B
PK DATE DATA
1 5/1/2013 CCC
1 8/1/2014 (null)
2 6/1/2014 QQQ
現在我需要做的就是更新表A中插入的副本如果在START和STOP之間的tableB中有相應的記錄,則記錄在前記錄。
舉例來說,在這個例子中,這將是我的期望更新表A:
PK START STOP DATA
1 1/1/2013 4/30/2013 AAA
1 5/1/2013 12/31/2013 CCC
1 1/1/2014 7/30/2014 AAA
1 8/1/2014 12/31/2014 (null)
2 1/1/2013 12/31/2013 BBB
2 1/1/2014 5/31/2014 BBB
2 6/1/2014 12/31/2014 QQQ
這是我到目前爲止已經寫的,但它似乎並沒有被工作作爲更新到以前的記錄的日期總是會變得混亂。
--For copying records
SELECT
A.PK, B.DATE AS START, A.STOP, B.DATA
INTO TEMP_TABLE
FROM TABLEA A
INNER JOIN TABLEB B ON B.PK=A.PK AND B.DATE BETWEEN A.START AND A.STOP
--For updating records
UPDATE A
SET A.STOP=DATEADD(DD,-1,TT.START)
FROM TABLEA A
INNER JOIN TEMP_TABLE TT ON TT.PK=A.PK AND TT.STOP=A.STOP
--Insert the records
INSERT INTO TABLEA SELECT * FROM TEMP_TABLE
我的推理有什麼問題嗎?還是有更好的方法去解決這個問題?任何投入將不勝感激。
對錶B中的行數和表A中的時間段是否有任何限制?如:表B將包含表A中每行最多一行? – jscott 2014-11-22 01:24:03
對錶B沒有限制,這裏的簡化版本是其他幾個腳本清理數據的結果,但理論上每個PK可能有任意數量的記錄。 – mooselover 2014-11-22 06:51:30