2013-02-05 64 views
1

我有两个要合并的表。循环遍历SQL表中的所有行和concat唯一值

表1由许多行的,下面是一个few-

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 - 

的foreach列于表2,我想找到COL4表1中的独特价值和Concat的他们

+1

您正在使用什么RDBMS? –

+0

我正在使用OracleDB。 – cornerstone

+0

什么版本的oracle? – FoolishSeth

回答

5

你可以使用格式为您Table1为字符串聚集Concat的,

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 
+0

工作就像一个魅力! – cornerstone

0

你所请求的是一个名为COL4表2中多值列。 Oracle不支持多值列。你可以做的是用table的外键创建另一列,并在那里保存你的多值数据。

例如,

Table 3 

table2_id value 
1   val4 
1   val5 
1   val6 
2   val4 
2   val5 
+0

它不一定是一个多值列。可以只串接一个字符串? – cornerstone