合并多列Oracle 11g表中一个字段的值

时间:2015-04-18 00:28:09

标签: sql oracle11gr2

合并多列表中一个字段的值。

T1在多个列中具有重复值,然后在最后一列中具有非唯一值。需要返回前6列中的唯一值,然后合并最后一列中的非唯一值。 Col1是焦点,因此积累来自col7中的各种值。中间的列并不重要,它们可以是唯一的也可以是非唯一的。它们确实需要显示在返回的值中。

样本高度简化为真正的问题,但手头的问题是返回col1,介于两者之间,然后连接从col7累积的值

  CREATE TABLE T1
  (
    COL1  NUMBER,
    COL2  NUMBER,
    COL3  NUMBER,
    COL4  NUMBER,
    COL5  NUMBER,
    COL6  NUMBER,
    COL7  NUMBER);--


INSERT INTO  T1 VALUES( 1, 2, 3, 4, 5, 6, 7);
INSERT INTO  T1 VALUES( 1, 2, 3, 4, 5, 6, 97);
INSERT INTO  T1 VALUES( 1, 2, 3, 4, 5, 6, 147);

Desired results
    COL1, COL2,    COL3,     COL4,       COL5,     COL6,       COL7
      1    2         3         1           2         3        7, 97,147

我认为它需要两个连接的自连接,但不知道如何创建脚本。

任何和所有建议和见解都表示赞赏。

1 个答案:

答案 0 :(得分:1)

首先,col1如果表中有重复值,则不是主键。您需要检查术语的使用。

您可以通过聚合执行此操作:

select col1, col2, col3, col4, col5, col6,
       listagg(col7, ',') within group (order by col7) as col7s
from t1
group by col1, col2, col3, col4, col5, col6;