2011-12-06 59 views
-1

SQL Server 2008中的表中複製記錄:表1SQL:同桌

ID DESC  TYP SUBSET VAL1 VAL2 VAL3 VAL4 PReview Country 

1 DESC1 1  1  1.0 1.1 1.2 1.2 0   1 
2 DESC1 1  1  2.0 1.1 1.2 1.2 0   1 
3 DESC1 1  1  1.0 1.1 1.2 1.2 0   1 
4 DESC2 2  1  3.0 2.1 1.7 1.8 0   1 
5 DESC2 2  1  4.0 3.1 1.7 1.9 0   1 
6 DESC2 2  1  5.0 6.1 1.5 1.6 0   1 
13 DESC1 1  1  1.0 1.1 1.2 1.2 1   1 
14 DESC1 1  1  2.0 1.1 1.2 1.2 1   1 
15 DESC1 1  1  1.0 1.1 1.2 1.2 1   1 

16 DESC2 2  1  1.0 6.1 1.7 1.2 1   1 
17 DESC2 2  1  2.0 4.1 6.2 8.2 1   1 
18 DESC2 2  1  1.0 8.1 7.2 1.9 1   1 

我需要複製具有預覽= 1成具有預覽0有沒有辦法來唯一確定每個記錄記錄記錄。只要他們有條不紊地複製。 記錄13應複製到記錄1 記錄14應複製到記錄2 記錄15應複製到記錄3

謝謝。

+2

「沒有辦法唯一地定義每條記錄」......「ID」列看起來是獨一無二的。它不是? – 2011-12-06 00:57:08

+1

預覽= 0和預覽= 1的行數是否相同? –

+1

-1對於一個半心半意的問題 - 遠不夠詳細,對你正在嘗試做什麼以及你的算法如何工作的描述很差。什麼'複製到'需要?你如何確定哪個記錄「複製到」哪個關聯記錄? 「複製到」後,原始行/目標行會發生什麼? –

回答

1

其基本思想是「枚舉」(即將索引附加到)源行和目標行,然後將索引1的源行分配給目標行的索引爲1,源行的索引爲2,索引2等:

UPDATE TABLE1 
SET 
    [DESC] = SOURCE.[DESC], 
    TYP = SOURCE.TYP, 
    SUBSET = SOURCE.SUBSET, 
    VAL1 = SOURCE.VAL1, 
    VAL2 = SOURCE.VAL2, 
    VAL3 = SOURCE.VAL3, 
    VAL4 = SOURCE.VAL4, 
    PREVIEW = SOURCE.PREVIEW, 
    COUNTRY = SOURCE.COUNTRY 
FROM (
    SELECT DEST_ID, SRC.* 
    FROM 
     (SELECT ID DEST_ID, RANK() OVER (ORDER BY ID) R FROM TABLE1 WHERE PREVIEW = 0) DEST 
     JOIN (SELECT *, RANK() OVER (ORDER BY ID) R FROM TABLE1 WHERE PREVIEW = 1) SRC 
      ON SRC.R = DEST.R 
) SOURCE 
WHERE TABLE1.ID = SOURCE.DEST_ID 

在普通的英語:

  • 附加索引,以行,其中PREVIEW = 0,在ID(RANK() OVER (ORDER BY ID))的順序。
  • 在PREVIEW = 1時執行相同操作。
  • 將源與目標索引匹配(JOIN ... ON SRC.R = DEST.R)。
  • 根據該匹配更新表格。

請在目的地的行數大於源行的數量少小心 - 初始查詢的執行將不會更新所有目標行和第二執行可能導致相同的源行被複制到不同的目的地行。

實際上,您會將相同的源行復制到多個目標行。

+0

@ Branko ..感謝您的回覆和建議。我會嘗試一下......但是我之前從未使用過索引,並且不確定我需要做什麼更改以使您的解決方案能夠順利進行: – shazia

+0

我已更新了示例數據..您可以查看它並查看是否你的解決方案將與它一起工作..與此同時,我會撓頭理解索引。非常感謝。 – shazia

+0

@shazia我不明白爲什麼我的解決方案不適用於新的測試數據,如果你照顧我已經描述的警告。你真的嘗試過嗎?它是做你想做的嗎? –

1

如果需要記錄爲「副本在」預覽= 0的記錄,你能不能只:

  • 刪除preview = 0記錄
  • 複製每個preview = 1記錄,以便你有各自的兩個副本。

這聽起來像你要求的。

+0

感謝亞當的建議..但我不能刪除預覽= 0記錄,因爲它們鏈接到其他tables.It會有如果我不需要身份欄 – shazia