Sql 如何任意替换select列的前1000行

Sql 如何任意替换select列的前1000行,sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,基本上,我有一个包含1000行和三列的表。(表A) 我还有一个表,有200列,记录超过100万条。(表B) 我试图用表A的三列替换表B中1000行的三列。我已经阅读了很多可以从表A插入表B的地方。。但这是无用的,因为我将在需要数据的其余197列中得到null 因此,任务是替换一个表中某些列的行,以选择另一个表中的列。没有任何条件,只有最上面一行或任何你能想到的顺序都可以。如果你能给出一个考虑到顺序的答案,那将是额外的奖励!非常感谢你 如果我理解你的要求 WITH TA AS (SELE

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

我还有一个表,有200列,记录超过100万条。(表B)

我试图用表A的三列替换表B中1000行的三列。我已经阅读了很多可以从表A插入表B的地方。。但这是无用的,因为我将在需要数据的其余197列中得到null


因此,任务是替换一个表中某些列的行,以选择另一个表中的列。没有任何条件,只有最上面一行或任何你能想到的顺序都可以。如果你能给出一个考虑到顺序的答案,那将是额外的奖励!非常感谢你

如果我理解你的要求

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 

试着这样做:

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部分。

您自己尝试过什么吗?这是一个简单的问题,我没有必要盲目地遵循“哦,展示您的工作”的策略。。显然,我的工作得出了错误的结果——我同意你在复杂问题上的观点,在这些问题上,分享一段旅程是有意义的——这是一个直接的查询,除了结果之外,没有任何东西可以显示。所以我认为没有必要分享我得到的错误数据。。。我确实分享了一些链接,“展示你的作品”在这样的情况下尤其重要,因为它极大地帮助我们弄清楚你到底想做什么,这一点都不清楚。如果不能做到这一点,请给我们一个例子,用数据说明你在寻找什么(之前和之后)。这个例子可以减少,比如从A中的10行8列减少到B中的3列…@Bulat-谢谢。Fixed@MartinSmith非常感谢你的回答。我想有人修正了我的问题,现在看来没问题了。基本上,表B(有很多列)需要从表A(几列)更新。答案比我想象的要复杂(不是说你的答案无效或不正确,只是说我认为这是一项比这更简单的任务)。谢谢again@LearnByReading-你的答案是否满足你的需要?愚蠢的问题,我得到一个错误,说“TA”不是一个可识别的表格提示。。这太奇怪了。我无法修复它:S
+1
排名前1000的
在这里很有帮助。我不确定如果不测试它是否会在B中计算出整个百万行,有趣的是,至少有8个成员认为答案有用,但问题被否决了。Stackoverflow被太多的伪管理员过度管理。@LearnByReading这是一种民主