我遇到一个问题,即当匹配不存在时,尝试使用另一个表中的值更新表。这是场景,我有一个参与表,有大约250K记录。我需要根据zip + 4代码找到与记录相关的立法区。我的参与表有zip和zip4代码。有时候我有两种,有时也没有。一定要喜欢这样的数据集。我有第二张表,其中包含9位邮政编码的所有立法区。我已经更新了数据集并包含了单独的zip和zip4代码。 这是我的代码:
update
[ComEd].[dbo].[PP_FFR_BU]
set
[Zip4] =
(
CASE
when
[Tim].[dbo].[PP_FFR_BU].[Zip] + [Tim].[dbo].[PP_FFR_BU].[Zip4] not in (select zip from [TimCIS].[dbo].[Legis_Districts])
then
CASE
when [Tim].[dbo].[PP_FFR_BU].[Zip] = [TimCIS].[dbo].[Legis_Districts].[Zip5] and [Tim].[dbo].[PP_FFR_BU].[Zip4] <> [TimCIS].[dbo].[Legis_Districts].[Zip4]
then (select top 1 [ComEdCIS].[dbo].[Legis_Districts].[Zip4] from [TimCIS].[dbo].[Legis_Districts] where [Tim].[dbo].[PP_FFR_BU].[Zip] = [TimCIS].[dbo].[Legis_Districts].[Zip5])
when len([Tim].[dbo].[PP_FFR_BU].[Zip])<5
then '0000'
end
end
)
where
[Tim].[dbo].[PP_FFR_BU].[Zip] + [Tim].[dbo].[PP_FFR_BU].[Zip4] not in (select zip from [TimCIS].[dbo].[Legis_Districts])
现在我收到一个错误:
Msg 4104,Level 16,State 1,Line 11 无法绑定多部分标识符“TimCIS.dbo.Legis_Districts.Zip4”。这相当于第二个CASE语句中的when子句。
如果原始表中的zip和zip4在立法区表中,那么我需要移动到下一条记录。如果zip在表中并且zip4不匹配,我需要匹配的第一个值。如果立法表中不存在zip,那么我想在参与表的zip4中放置一个'0000'。任何见解将不胜感激。
答案 0 :(得分:0)
在case语句中,您有这个查询:
then (select top 1 [ComEdCIS].[dbo].[Legis_Districts].[Zip4] from [TimCIS].[dbo].[Legis_Districts] where [Tim].[dbo].[PP_FFR_BU].[Zip] = [TimCIS].[dbo].[Legis_Districts].[Zip5])
但这部分没有意义:
select top 1 [ComEdCIS].[dbo].[Legis_Districts].[Zip4] from [TimCIS].[dbo].[Legis_Districts]
您正在从表中选择一个不在from子句中的列。它们位于两个不同的数据库中。