0

それぞれがキーとデータの列を返す 3 つの select ステートメントがあります。

KEY     DATA_1
------- -------
A       123
B       456

KEY     DATA_2
------- -------
B       987
C       654
D       321

KEY     DATA_3
------- -------
D       234
E       567

どうやって:

a) 3 つのデータ列を 1 つの結果セットにマージします。

KEY     DATA_1   DATA_2  DATA_3
------- -------- ------- -------
A       123      NULL    NULL 
B       456      NULL    NULL
B       NULL     987     NULL
C       NULL     654     NULL
D       NULL     321     NULL
D       NULL     NULL    234
E       NULL     NULL    567

b) 行を統合して、各キーが 1 回だけ表示され、各列に適切なデータ値が含まれるようにします。

KEY     DATA_1   DATA_2  DATA_3
------- -------- ------- -------
A       123      NULL    NULL 
B       456      987     NULL
C       NULL     654     NULL
D       NULL     321     234
E       NULL     NULL    567

c) NULL 値を任意の値 (「000」など) に置き換えます

KEY     DATA_1   DATA_2  DATA_3
------- -------- ------- -------
A       123      000     000
B       456      987     000
C       000      654     000
D       000      321     234
E       000      000     567
4

2 に答える 2

1

順番にお答えしましょう。

1 の場合:

select key, data_1, data_2, data_3
from ((select key, data_1, NULL as data_2, NULL as data_3
       from t1
      ) union all
      (select key, NULL, data_2, NULL
       from t2
      ) union all
      (select key, NULL, NULL, data_3
       from t3
      )
     ) t

2 の場合:

select key, max(data_1), max(data_2), max(data_3)
from ((select key, data_1, NULL as data_2, NULL as data_3
       from t1
      ) union all
      (select key, NULL, data_2, NULL
       from t2
      ) union all
      (select key, NULL, NULL, data_3
       from t3
      )
     ) t
group by key;

3 の場合:

select key, coalesce(max(data_1), '000'),
       coalesce(max(data_2), '000'), coalesce(max(data_3), '000')
from ((select key, data_1, NULL as data_2, NULL as data_3
       from t1
      ) union all
      (select key, NULL, data_2, NULL
       from t2
      ) union all
      (select key, NULL, NULL, data_3
       from t3
      )
     ) t
group by key;

最後の例では、データ値が文字列であることを前提としています。それ以外の場合、 は'000'数値 0 に変換されます。

于 2013-05-22T13:46:10.393 に答える