【问题标题】:How do I update certain Values from one table into another如何将某些值从一个表更新到另一个表
【发布时间】:2023-03-22 18:58:01
【问题描述】:

我有两个表,其中包含看似不相关的数据,并希望用另一个表的值更新一列。例如

t文章

ID        Weight    orderId    count
57        1000      10         1
1000      500       10         3
2501      1500      10         1
13        725       10         1
758       1000      10         1
...

tPackage

ID        Weight    orderId
1001      0         10
1002      0         10
1003      0         10
1004      0         10
...

这是插入后的样子:

tPackage

ID        Weight    orderId
1001      1000      10
1002      500       10
1003      500       10
1004      500       10
1005      1500      10
1006      725       10
1007      1000      10
...

这些包裹没有参考文章,但我每篇文章都有一个包裹,需要为每个包裹分配一篇文章的重量。一篇文章可以出现多次,并且需要为每个单元分配其权重。我总是有确切的包裹数量。

关于我所尝试的,我真诚地不得不说,我对如何尝试这一点完全空白。我必须创建一个临时表来管理这个吗?

【问题讨论】:

  • 将 tArticle 与计数表中的计数表相结合>=tally.id 以创建重复项。使用 row_number() over (order by ID,tally.id) 创建一个“新” id - 在临时表或 cte 上执行此操作,无论适合您。直接使用 row_number() 为您的 tPackage 执行相应的 id(按 ID 排序)。加入 newID 并更新。如果您想要更多/更快的答案,请添加到您的问题中创建/插入脚本:)

标签: tsql insert


【解决方案1】:

感谢 George Menoutis,我想我想通了。 Tally 表、ctes 和 Row_number() 对我来说都是新概念,所以花了我一段时间。这是我得到的:

WITH tally AS(
    SELECT N=Number, myId=ROW_NUMBER() OVER(ORDER BY ID, Number), Weight
    FROM master..spt_values 
    JOIN tArticle ON count >= Number 
    WHERE type = 'P'
),
cte AS
(
    SELECT myId = ROW_NUMBER() OVER(ORDER BY ID), Weight
    FROM tPackage 
)
UPDATE cte SET cte.Weight = tally.Weight
FROM tally WHERE tally.myId = cte.myId

除非有人有更好的东西,否则我会接受这个作为我的答案

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-01
    • 1970-01-01
    • 2020-12-24
    • 1970-01-01
    • 1970-01-01
    • 2020-05-22
    • 2017-01-13
    • 1970-01-01
    相关资源
    最近更新 更多