【发布时间】: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