2011-10-21 11 views
6

編集: COALESCEメソッドを試した後、データがワット数カテゴリごとに同じデータで繰り返される問題が発生しています。列2はワット数です。 enter image description here異なるデータを持つ2つの同一のテーブル構造を結合する

全く同じテーブル構造の2つの一時テーブルを作成しました。これらの表には、同じ値を持つことができる複数の列と、異なる数を持ついくつかの値の列があります。これらのうちのいくつかは、ある列ではNULLになり、別の列ではNULLになりません。すべての値をまとめて、同じサイトとプラントの行に値を追加したいと思います。ここで

は私が

TABLE1を期待するもの2つのテーブルのように見える可能性があり、結果の例である:

SITE  PLANT   VALUE_1   VALUE 2 
S1  P1    54    66 
S1  P2    43    43 

表2:

SITE  PLANT   VALUE_1   VALUE_2 
S1  P1   33    43 
S2  P1   34    22 

結果:

SITE  PLANT   t1_VALUE_1 t1_VALUE_2 t2_VALUE_1  t2_VALUE2 
S1  P1   54   66   33    43 
S1  P2   43   43   NULL   NULL 
S2  P1   NULL   NULL   34    22 

私のオリジナル思考は完全な結合になります。しかし、これは機能しません。なぜなら、selectステートメントでは、siteとplantのような列を取得する場所を指定する必要があります。 t1.siteとt2.siteの両方を選択すると、2つの列が生成されます。私が得た最も近いものは以下のクエリでしたが、S1にはないサイトとプラントを持つS2の結果がいつでもありますが、S1とS2のヌル値を受け取ります。

SELECT t1.Site, t1.Plant, t1.Value_1, t1.Value_2, t2.Value_1, t2.Value_2 
FROM table1 t1 
FULL JOIN table2 t2 
ON t1.site = t2.site 
AND t1.plant = t2.plant 
+0

HTMLマークアップを使用しないでください。スペースを保存した表を貼り付けるには、 "format as code"アイコンを使用します。 –

+0

@Tom - S1とS2は列または表としてリストされません。あなたは実際に何を指していますか? –

答えて

1

coalesceを使用できます。パラメータから最初の非NULL値を返します。

SELECT coalesce(t1.Site, t2.Site) as Site, coalesce(t1.Plant, t2.Plant) as Plant, 
4

このクエリを実行するには、2つのトリックが必要です。最初はFULL JOINです。フル・ジョインを使用すると、両方の表を結合し、ジョイン条件と一致しないときにいずれかの表にヌルを挿入できます。 2番目はCOALESCEで、この行のレコードが結果に表示されているテーブルのいずれかからプラントとサイトを取得できます。

SELECT Coalesce(t1.Site,t2.Site) As Site, COALESCE(t1.Plant, t2.Plant) As Plant, 
    t1.Value_1 As t1_Value_1, t1.Value_2 As t1_Value_2, 
    t2.Value_1 As t2_Value_1, t2.Value_2 As t2_Value_2 
FROM Table1 t1 
FULL JOIN Table2 t2 ON t1.Site = t2.Site AND t1.Plant = t2.Plant 
+0

入力していただきありがとうございます。合体機能でスマートにする必要があります。最新の質問をご覧ください – Tom

関連する問題