循环遍历SQL表中的所有行和concat唯一值

时间:2013-02-05 03:29:24

标签: sql oracle stored-procedures foreach grouping

我有两个表要合并。

表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如下 -

col1   col2  col3  col4

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

表2中的Foreach行,我想找到col4表1的唯一值并将它们连接起来

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您要求的是table2中名为col4的多值列。 Oracle不支持多值列。你可以做的是创建另一个包含table2外键的列,并在那里保存你的多值数据。

例如

Table 3

table2_id value
1         val4
1         val5
1         val6
2         val4
2         val5