2012-04-12 9 views
0

私は、顧客に郵便番号の最初の3桁で関連付けられたSales Repsを持っています。これは米国のお客様のみに適用されます。 Profile_Zipテーブルには、Repを表すProfile_Keyと郵便番号の最初の3桁のThree_Digitsの2つの列があります。顧客の記録を保持しているプロファイルテーブルの部分文字列を使用してレコードを特定し、レコードを更新する

Profile_Key  Three_Digits 
123456   610 
123456   611 
123456   612 

2つのフィールドは、郵便番号(郵便番号)と営業担当者のProfile_Keyを保持している協会のフィールドです。

Customerのassociation_keyをProfile_Zipテーブルの担当者のプロファイルキーで更新するクエリを実行する必要があります。これは私が取り組んできたものです。

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)) 

は、私はこのエラーを取得する理由を、私は、クエリを動作させるためにまたは部分がある場合は、右/最適なルートを取る方法を見つけ出すことはできません知っています。

サブクエリが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 

答えて

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) 

問題は、あなたが結果セットにスカラー値を設定しようとしているということです。この場合、結果セットを更新し、使用する正しいスカラー値を設定します。

+0

ご協力いただきありがとうございます。これはトリックでした。 – Stan

0

あなたがINを使用する必要があるときに=を使用していること

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

を示すエラーがもちろんあります。 =を使用すると、システムは1つの結果しか期待しません。特に

、私は推測している:

Select substring(zip, 1, 3) as ZipPrefix 
From profile 
group by profile.zip 

はストリングの大規模な数を返します。このサブクエリの外側にINを使用してください。

+0

いいえ、間違っています。その場合ではありません。作成者は、Profile_Zipに対して行ったのと同様に、関連するすべてのテーブルの構造を公開してください。 – heximal

+0

テーブル構造とデータに関する追加情報を共有できますか? –

+0

私はプロファイルテーブルのテーブル構造を追加しました。ありがとう。 – Stan

関連する問題