0

顧客の郵便番号の最初の3桁で顧客に関連付けられている営業担当者がいます。これは米国の顧客のみを対象としています。Profile_Zipテーブルには、郵便番号の最初の3桁の担当者とThree_Digitsを表す2つの列Profile_Keyがあります。

 Profile_Key      Three_Digits
 123456            610
 123456            611
 123456            612

顧客のレコードを保持するプロファイルテーブルの2つのフィールドは、Zip(郵便番号)と営業担当者のProfile_Keyを保持するAssociationフィールドです。

顧客の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))

このエラーが発生する理由はわかっています。クエリを機能させる方法や、Substringが正しい/最適なルートであるかどうかがわかりません。

サブクエリは複数の値を返しました。サブクエリが=、!=、<、<=、>、> =の後に続く場合、またはサブクエリが式として使用される場合、これは許可されません。

これを行う別の方法はありますか?ありがとう。

プロファイルテーブル。John Doeが担当者(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
4

2 に答える 2

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)

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

于 2012-04-12T19:49:13.093 に答える
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このサブクエリの外で使用します。

于 2012-04-12T19:43:46.180 に答える