如何不加选择地替换TOP 1000行的选择列

时间:2015-12-09 17:36:18

标签: sql sql-server sql-server-2012

基本上我有一个包含1000行和3列的表。 (表A)

我有另外一个包含200列和100万条记录的表。 (表B)

我正在尝试将表格B的1000行的三列替换为表A的那些。我已经阅读了很多solutions,您可以从表A中插入表B ..但是这是无用的,因为我在剩下的197列中得到NULL,我需要数据。

因此,任务是从一个表中替换某些列的行以选择另一个表的列。没有条件,只有顶行或任何你能想到的顺序都没问题。如果你能给出一个将ORDER BY考虑在内的答案,那就是奖金!非常感谢!

2 个答案:

答案 0 :(得分:5)

如果我理解你的要求

WITH TA
     AS (SELECT *,
                ROW_NUMBER()
                  OVER (
                    ORDER BY col1) AS RN
         FROM   TableA),
     TB
     AS (SELECT *,
                ROW_NUMBER()
                  OVER (
                    ORDER BY col1) AS RN
         FROM   TableB)
UPDATE TB
SET    TB.col1 = TA.col1,
       TB.col2 = TA.col2,
       TB.col3 = TA.col3
FROM   TB
       JOIN TA
         ON TB.RN = TA.RN 

答案 1 :(得分:3)

尝试这样的事情:

WITH topB AS (
SELECT TOP 1000 row_number() OVER(ORDER BY field_n) rn, b.* FROM table_b b
ORDER BY field_x),
topA AS (
SELECT row_number() OVER(ORDER BY field_m) rn, a.*
FROM table_a a)
UPDATE b
SET 
  b.Field_1 = a.Field_1,
  b.Field_2 = a.Field_2,
  b.Field_3 = a.Field_3
FROM 
  TopB b JOIN TopA a ON b.rn = a.rn

这里的想法是在两个表中分配行号,用这些数字连接它们,并用A中的值更新连接的B部分。