【问题标题】:Update A column based on values in B column根据 B 列中的值更新 A 列
【发布时间】:2020-04-27 07:58:41
【问题描述】:

假设我有Table1Table2,如下所示:

表1

Nmae  ColA ColB
---------------
Peter 25   
Jason 52   
Tom   74
Jim   65

表2

Values Prize
-------------
25     ABC
50     ABC1
75     ABC2
100    ABC3

现在我想根据ColA 中的值更新Table1 中的ColB。 例如如果value >= 25 and < 50ABC。如果value >= 50 and < 75 那么ABC1

期望的输出:

Name ColA ColB
----------------
Peter 25   ABC
Jason 52   ABC1
Tom   76   ABC2
Jim   65   ABC1

我试图通过加入两个表来更新 ColB 来解决这个问题,但是卡住了。我知道这可以通过使用 CASE WHEN 轻松完成。但是,我担心如果规则发生变化或发生什么,我必须修改多个 SP 中的代码。

【问题讨论】:

  • 在表格上创建一个包含 ColB 计算的视图不是更好吗?这样,如果规则发生变化,您只需在一个地方进行更改,而不是更新所有数据。

标签: sql-server join sql-update


【解决方案1】:

您可以使用子查询而不是 CASE WHEN 轻松地进行更新

update table1 set ColB = (select top 1 Prize 
                          from table2 
                          where Values <= ColA order by Values desc)

【讨论】:

  • Marc 感谢您的回复,但是您可以使用 join 提供答案吗?因为子查询可能会降低性能。
  • @AaronKuo 加入,子查询,性能一样好。 SQL Server 知道它的东西,不要再猜测了。
  • @AaronKuo 如果在 Table2 上为 Values 列添加索引,降序,性能应该没问题。
猜你喜欢
  • 1970-01-01
  • 2018-08-06
  • 1970-01-01
  • 2012-11-23
  • 1970-01-01
  • 2023-01-08
  • 1970-01-01
  • 2020-02-19
  • 2019-11-13
相关资源
最近更新 更多