2016-11-14 14 views
0

申し訳ありませんが、タイトルが混乱する可能性がありますが、ここでより説明しようとします。だから私は2つのテーブルを持っています。2つのテーブルから1にSQLに挿入します。2つのテーブルの間にいくつかの値があります

Table1 
Name 
Int 
Decimal 

Table2 
Name 
Int 
Decimal 

私は第3のテーブルにデータを結合しようとしています。

Table3 
Name 
Table1_Int 
Table1_Decimal 
Table2_Int 
Table2_Decimal 

この挿入物は問題ではありません。問題は、1つのテーブルに存在し、他のテーブルには存在しない名前がいくつかあることです。私はまだ値がないところでNULL値を表示するだけでこれらを表示します。ここで

は私のストアドプロシージャ

IF NOT EXISTS(
    SELECT Name FROM Table3) 
    INSERT INTO Table3(
     Name, 
     Table1_Int, 
     Table1_Decimal, 
     Table2_Int, 
     Table2_Decimal) 
    SELECT 
     t.Name, 
     AVG(t.Int) as Table1_Int, 
     AVG(CAST(t.Decimal as decimal(6,2))) as Table1_Decimal 
     AVG(a.Int) as Table2_Int, 
     AVG(CAST(a.Decimal as decimal(6,2))) as Table2_Decimal 
    FROM Table1 t 
    JOIN Table2 a 
    ON t.Name = a.Name 
    GROUP BY t.Name 
ELSE 
    UPDATE Table3 
    SET Name = Name 

は、彼らがテーブル間で一致した場合、私は、関係なくすべての名前をつかむことができとにかくですか?

+1

左結合を使用してください... – JohnHC

+0

haha​​ wow。ちょうどwow – maltman

+0

@ JohnHCの投稿に答えがあるので、私はあなたに信用を与えることができます。ありがとうございました。私は愚かなろばのように感じる – maltman

答えて

1

私はFULL OUTER JOINの基本ロジックに行きます。私はそれがこのようなものに見えると期待しています。

SELECT 
COALESCE(t.name, a.name) name 
,AVG(t.Int) t_int 
,AVG(CAST(t.Decimal as decimal(6,2))) t_decimal 
,AVG(a.Int) a_int 
,AVG(CAST(a.Decimal as decimal(6,2))) a_decimal 
FROM Table1 t 
FULL OUTER JOIN Table2 a 
    ON t.name = a.name 
GROUP BY COALESCE(t.name, a.name) 
+0

に参加して気づいたので、私はそれ自身で選択を行う場合、私は値を参照してください。私がインサートをすると、同じ結果が得られます。それは私のIF/ELSEですか? – maltman

+0

テーブルからすべてを削除して再度実行し、それが機能しました。 – maltman

+0

優秀、それはあなたのために働いてうれしい –

関連する問題