如果字段不为空,则使用来自同一表中字段的值更新列



提前感谢大家,我一直在尝试使用下面帖子中的查询,仅在值不为空的情况下使用同一列更新name_field列中的空值

基于非Null的相同字段更新字段

我的表有ParcelID_Field, Name_Field和Address_Field有时Namefield是空白的。地址和ID字段总是被填充。每当Name字段为NULL时,我希望使用存在的信息填充NULL字段

这个查询几乎可以工作,但是它说运行时没有行受到影响。()中的select工作得很好,只是没有更新任何值。

update [DMSEngine].[dbo].[IndexForm_ePermitsResults] 
set Name_Field = (select b2.Name_Field
from [DMSEngine].[dbo].[IndexForm_ePermitsResults] b2
where b2.Name_Field is not null and
b2.ParcelID_Field = ParcelID_Field and
ParcelID_Field = 12257
)
where ParcelID_Field = 12257 and Name_Field is null;
tbody> <<tr>史密斯史密斯
ParcelID_FieldName_FieldAddressField
1111街道名称
1111街道名称
1111街道名称
1111街道名称
2223街道名称
222雅各布斯3街道名称
2223街道名称
2223街道名称

在编辑表中的数据时,先单独尝试Select查询,这样您就可以知道它是否返回正确的数据。

关于这个查询:为什么有ParcelID_Field = 12257"?这个"where"条件将只给您一个字段,其中Name_Field为null且ParcelID_Field为12257。

我明白了。由于上述质疑者的暗示,这次选择被取消了。所以我改变了select语句,但还是抛出了一个错误。子查询返回的值大于1。这是不允许的……所以我仔细研究了这个错误,并在我的查询中包含了MAX,它起作用了。

正确答案是

update [DMSEngine].[dbo].[IndexForm_ePermitsResults] 
set Name_Field = (select MAX (b2.Name_Field)
from [DMSEngine].[dbo].[IndexForm_ePermitsResults] b2
where b2.Name_Field <>'' and
b2.ParcelID_Field = ParcelID_Field and
ParcelID_Field = 12257
)
where ParcelID_Field = 12257 and Name_Field = ' ';