我的销售代表通过客户邮政编码的前三位与客户相关联 - 这仅适用于美国客户。 Profile_Zip表有两列Profile_Key,代表邮政编码前三位的Rep和Three_Digits。
Profile_Key Three_Digits
123456 610
123456 611
123456 612
Profile表中包含客户记录的两个字段是Zip(邮政编码)和一个包含销售代表的Profile_Key的Association字段。
我需要运行一个查询,使用Profile_Zip表中的rep的配置文件密钥更新Customer的association_key。这就是我一直在使用的。
update profile set association_key =
(select profile_key from profile_zip where three_digits =
(Select substring(zip, 1, 3) as ZipPrefix
From profile group by profile.zip))
我知道为什么我会收到此错误,我无法弄清楚如何使查询工作或者如果Substring是正确/最佳路径。
子查询返回的值超过1。子查询遵循=,!=,<,< =,>,> =或使用子查询时不允许这样做 作为表达。
还有其他办法吗? 谢谢。
个人资料表。 John Doe是rep(profile_type = 4),Mary是客户(profile_type = 6)。 John的profile_key位于Mary的Association_key字段中,这就是它们的结合。记录当然有更多字段(地址,电话等)
Profile_key Profile_Type_Key First_Name Last_Name Zip Association_Key ...
123456 4 John Doe 92112
987654 6 Mary Smith 90210 123456
答案 0 :(得分:1)
我认为这就是你要做的事情:
UPDATE P
SET Association_Key = PZ.Profile_Key
FROM [Profile] P
INNER JOIN Profile_Zip PZ
ON PZ.Three_Digits = SUBSTRING(P.Zip, 1, 3)
问题是您正在尝试将标量值设置为结果集。在这种情况下,您需要更新结果集,然后使用正确的标量值。
答案 1 :(得分:0)
错误
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
表示您在需要=
时使用IN
。使用=
时,系统只需要1个结果。
特别是,我猜测:
Select substring(zip, 1, 3) as ZipPrefix
From profile
group by profile.zip
返回大量子字符串。在此子查询之外使用IN
。