2017-09-21 9 views
2

と言うと、私はT1はこのようなテーブルを探しています。このように見てアクセスSQL:2つのテーブルをマッピングするが、条件

ID | Name | Value  | Flag 
------------------------------------- 
1 | A | (0) Something | Alpha 
1 | A | (2) Inaccurate| Beta 
2 | B | (4) Something | Alpha 
2 | B | (5) Inaccurate| Beta 
2 | B | (0) Something | Gamma 

とテーブルT2:

ID | Name | Value  | 
---------------------------- 
1 | A |  X   | 
2 | B |  X   | 
2 | B |  W   | 

私が何をしたいのか私はそれらの値が正確ではありませんので、どこ旗=ベータ版を除くT1からのすべてのデータを新しいテーブルT3を作成したい

  1. :れます。

  2. 次に、T2からのより正確なデータを、フラグ=ベータのものにマップしたいが、T2がこのIDに対して1つの値しか持たない場合にのみ、マップする。さもなければ私は代わりにエラー値を持っています。

現在の結果:

  1. は、私がもし-条項を含む、方法がわからないので、何の問題
  2. は少し問題があるんです。だから、基本的には同じようなもの:このかかわらずの仕事とスローしません

    INSERT INTO T3 (ID, Name, Value, Flag) 
    SELECT T1.ID, T1.Name, 
         IIF(
          LEN(
           SELECT DISTINCT Value 
           FROM T2 WHERE T1.ID = T2.ID) 
         = 1, T2.Value, 'Error'), 
         T1.Flag 
    FROM T1 
    INNER JOIN T2 ON T1.ID = T2.ID 
    WHERE (T1.Flag = 'Beta' AND T1.ID = T2.ID) 
    

エラー3075

答えて

1

"クエリ式内の関数で使用される引数の数が間違って" あなたの現在のロジックは遠く離れていません。私はちょうど1つのレコードを持つIDの値を識別する2番目のテーブルのサブクエリに参加できます。これは、最初の表のベータレコードに使用される可能性のある、正確で信頼できる価値を示します。

INSERT INTO T3 (ID, Name, Value, Flag) 
SELECT T1.ID, T1.Name, NZ(T2.Value, T1.Value), T1.Flag 
FROM T1 
LEFT JOIN 
(
    SELECT ID, MAX(Value) 
    FROM T2 
    GROUP BY ID 
    HAVING COUNT(*) = 1 
) T2 
    ON T1.ID = T2.ID AND T1.Flag = 'Beta' 
+0

こんにちは、ありがとうございます! サブクエリは – nvrslnc

関連する問題