【问题标题】:Table update - use one column to update another表更新 - 使用一列更新另一列
【发布时间】:2021-06-20 12:50:27
【问题描述】:

我有一张如下所示的表格:

表1

Val1    Val2       Type     Date          Key
NULL    110.1      T        11/30/2020    174
NULL    205.5      D        12/31/2020    133
NULL    360.7      T        11/30/2020    190

在这种情况下,键是唯一的。我想要做的是 Set Val1 = Val2 where Type='T' and Date = '11/30/2020'

这看起来正确吗?

 Update t1
 set t1.Val1 = t2.Val2
 From Table1 t1
 JOIN Table1 t2
      on t1.Key = t2.Key
 Where t1.type='T' and t1.Date = '11/30/2020'

期望的结果:

Val1     Val2       Type     Date          Key
110.1    110.1      T        11/30/2020    174
NULL     205.5      D        12/31/2020    133
360.7    360.7      T        11/30/2020    190

【问题讨论】:

  • 成功了吗?奇怪的是问我们而不是只是尝试。
  • “这看起来正确吗?” 为什么不运行查询,看看它是否有效?或首先将语句作为SELECT 运行,这样您就可以看到将更新哪些行以及将分配的新值。 可以更好地检查我们,他们无权访问您的实例。
  • 只是一个旁注,我看到这些列是可以为空的。您可能想使用IS NULL 检查无效性。与 null 相等有点不直观,例如NULL = NULL 可以评估为FALSE。避免这种情况的一种方法是set ansi_nulls on
  • @prnvbn 大概你的意思是set ansi_nulls off,这只是为了向后兼容,当它是off 时,你不能做很多事情。 可能会觉得它不直观,但这就是 SQL 的用途。

标签: sql sql-server tsql sql-server-2016


【解决方案1】:

我认为你不需要join

update table1
    Set Val1 = Val2
    where Type='T' and Date = '2020-11-30';

注意:我建议使用标准格式的日期,所以不要使用 '2020-11-30''20201130'

【讨论】:

  • 如果 OP 使用的是较旧的日期和时间数据类型(datetimesmalldatetime)我不推荐yyyy-MM-dd,因为它不明确;对于较新的数据和时间数据类型,不是
  • 在什么情况下我需要加入?我只是好奇。我想我想多了
  • @Koosh 。 . .根据你的问题,你想多了。您需要的所有数据都在一行中。
猜你喜欢
  • 2020-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-25
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
相关资源
最近更新 更多