【问题标题】:Loop through all rows and concat unique values in SQL table循环遍历所有行并连接 SQL 表中的唯一值
【发布时间】:2013-02-05 03:29:24
【问题描述】:

我有两个要合并的表。

表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 中的每一行,我想找到 col4 表 1 的唯一值并将它们连接起来

【问题讨论】:

  • 你用的是什么关系型数据库?
  • 什么版本的oracle?

标签: sql oracle stored-procedures foreach grouping


【解决方案1】:

您可以使用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

【讨论】:

    【解决方案2】:

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

    例如

    Table 3
    
    table2_id value
    1         val4
    1         val5
    1         val6
    2         val4
    2         val5
    

    【讨论】:

    • 它不必是多值列。可以只连接为字符串吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-14
    • 2017-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-28
    相关资源
    最近更新 更多