如果字段不为空,则使用同一 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 = ' ';
提前谢谢大家,我一直在尝试使用下面 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 = ' ';