【问题标题】:Concatenate column values for specific fields while displaying other column values in Oracle 11.2连接特定字段的列值,同时在 Oracle 11.2 中显示其他列值
【发布时间】:2021-06-14 05:35:41
【问题描述】:

我是一个 SQL 菜鸟。

如何在显示其他列值的同时连接特定字段的列值?

我会尽力展示一个简化的例子。

假设我有下表:

表 A

Name Address Email Value1 Value2 Value3
Sam 123 Main Street sam@coporate.com 34 51 39
Peter 789 High Street peter@coporate.com 73 05 59
Sam 123 Main Street sam@coporate.com 43 12 84
Sally 456 State Street sally@coporate.com 35 76 23
Sally 456 State Street sally@coporate.com 77 34 18
Peter 789 High Street peter@coporate.com 32 14 54
Sally 456 State Street sally@coporate.com 64 49 23

预期输出

Name Address Email Value1 Value2 Value3
Sam 123 Main Street sam@coporate.com 34,43 51,12 39,84
Sally 456 State Street sally@coporate.com 35,64,77 76,49,34 23,23,18
Peter 789 High Street peter@coporate.com 32,73 14,05 54,59

我尝试使用LISTAGG,但我遇到的问题是我无法显示名称、地址和电子邮件字段。请帮助并提前感谢您!

【问题讨论】:

标签: sql oracle aggregate string-concatenation string-aggregation


【解决方案1】:

试试:

SELECT NAME, ADDRESS, EMAIL,
    LISTAGG(value1, ',') WITHIN GROUP (ORDER BY value1) new_value_1,
    LISTAGG(value2, ',') WITHIN GROUP (ORDER BY value2) new_value_2,
    LISTAGG(value3, ',') WITHIN GROUP (ORDER BY value3) new_value_3
FROM TABLE_A
GROUP BY NAME, ADDRESS, EMAIL;

我将我的编译器安装到工作计算机中,我不确定。如果我错了,请告诉我放弃回答。

【讨论】:

    【解决方案2】:

    这应该做你想做的:

    select name, address, email,
           listagg (value1, ',') within group (order by name) as values1,
           listagg (value2, ',') within group (order by name) as values2,
           listagg (value3, ',') within group (order by name) as values3
    from a
    group by name, address, email;
    

    Here 是一个 dbfiddle。

    【讨论】:

      猜你喜欢
      • 2022-06-10
      • 2021-07-03
      • 1970-01-01
      • 1970-01-01
      • 2019-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多