1

マージしたい2つのテーブルがあります。

多くの行で構成される表 1。以下はその一部です。

col1   col2  col3  col4

val1   val2  val3  val4
val1   val2  val3  val5
val1   val2  val3  val6
valx   valy  valz  val4
valx   valy  valz  val5

(val* はすべて文字列)

表 2 は一意の行 (約 1000 行) で構成されています - col1 col2 col3 col4

val1   val2  val3  -
valx   valy  valz  -
vala   valy  valz  -

表2が次のようになるように、2つのテーブルをマージしたい-

col1   col2  col3  col4

val1   val2  val3  val4,val5,val6
valx   valy  valz  val4,val5
vala   valy  valz  -

テーブル 2 の各行について、col4 テーブル 1 の一意の値を見つけて連結したい

4

2 に答える 2

5

の形式を使用して、文字列集約として連結できますTable1

SELECT col1,
     col2,
     col3,
     listagg(col4, ',') within GROUP(
ORDER BY col4) AS col4
FROM agg_test
GROUP BY col1,
     col2,
     col3;

次のような結果が得られます。

col1    col2    col3    col4
______________________________________    
val1    val2    val3    val4,val5,val6
valx    valy    valz    val4,val5
于 2013-02-05T04:39:57.913 に答える
0

あなたが要求しているのは、table2 の col4 という名前の多値列です。Oracle は複数値列をサポートしていません。できることは、table2 への外部キーを持つ別の列を作成し、そこに多値データを保存することです。

例えば

Table 3

table2_id value
1         val4
1         val5
1         val6
2         val4
2         val5
于 2013-02-05T04:09:17.100 に答える