【问题标题】:Oracle SQL 'select' with 1 column having combined valuesOracle SQL“选择”,其中 1 列具有组合值
【发布时间】:2014-08-29 07:04:55
【问题描述】:

表 t1:

pk_id | col1 | col2 | col3
===========================
1     | val1 | val2 | val3

表 t2:(fk_id 是对 pk_id 的外键引用)

fk_id | col4
=============
1     | val4A
1     | val4B
1     | val4C

我的 SQL 查询是:

select pk_id,col1,col2,col3,col4
from t1 left join t2 on t1.pk_id=t2.fk_id;

结果是:

pk_id | col1 | col2 | col3 | col4
===================================
1     | val1 | val2 | val3 | val4A
1     | val1 | val2 | val3 | val4B
1     | val1 | val2 | val3 | val4C

但我其实想要这个结果:

pk_id | col1 | col2 | col3 | col4
===============================================
1     | val1 | val2 | val3 | val4A;val4B;val4C

如何改变'select'查询来实现这个结果,col4值是val4A、val4B、val4C的组合值(用分号分隔)?

【问题讨论】:

标签: sql oracle select left-join


【解决方案1】:

您可以为此使用LISTAGG

select pk_id,col1,col2,col3,
                    LISTAGG (t2.col4, ';') WITHIN GROUP (ORDER BY t2.col4) AS col4
from t1 left join t2 on t1.pk_id=t2.fk_id
group by pk_id, col1, col2, col3;

【讨论】:

  • 错误:ORA-00937:不是单组群函数
  • 啊,抱歉,我添加了 group by 子句。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-01
  • 2020-01-27
  • 1970-01-01
相关资源
最近更新 更多