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

Update column with values from field in the same table if field is not null

提前谢谢大家,我一直在尝试使用下面 post 中的查询来更新 name_field 列中的空值,仅当值不为空时才使用同一列

我的 table 有 ParcelID_Field、Name_Field 和 Address_Field 有时名称字段为空白。地址和 ID 字段始终被填充。每当 Name 字段为 NULL 时,我想使用那里的信息来填充 NULL 字段

这个查询几乎可以工作,但它说 运行 时有 0 行受到影响。 ( ) 中的 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;
ParcelID_Field Name_Field AddressField
111 smith 1 street name
111 1 street name
111 1 street name
111 smith 1 street name
222 3 street name
222 jacobs 3 street name
222 3 street name
222 3 street name

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

关于这个查询:为什么你有“ParcelID_Field = 12257”?此“where”条件只会为您提供 Name_Field 为空且 ParcelID_Field 为 12257 的字段。

我明白了。正如上面提问的帖子所暗示的那样,select 已关闭。所以我更改了 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 = ' ';