SQL Server 2008表:table1
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
我需要将具有preview = 1的记录复制到具有预览0的记录中。没有办法唯一地定义每条记录。只有它们才能以有序的方式复制。 记录13应复制到记录1 记录14应复制到记录2 记录15应复制到记录3
感谢。
答案 0 :(得分:1)
如果你需要记录“复制”预览= 0记录,你不能只是:
preview = 0
记录preview = 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
用简单的英语:
RANK() OVER (ORDER BY ID)
)的顺序将索引附加到PREVIEW = 0的行。JOIN ... ON SRC.R = DEST.R
)。当目标行数小于源行数时请小心 - 初始查询执行不会更新所有目标行,第二次执行可能会导致相同的源行复制到不同目标行。
实际上,您要将同一源行复制到多个目标行。