使用Substring识别记录和更新记录

时间:2012-04-12 19:40:25

标签: sql substring

我的销售代表通过客户邮政编码的前三位与客户相关联 - 这仅适用于美国客户。 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

2 个答案:

答案 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