PL/SQL - 选择列值作为字符串数组

问题描述 投票:0回答:3

我不确定这个问题之前是否在其他地方被问过。我也不知道该怎么说。但我会用一个场景来解释。
我有以下表格
TAB1 包含列:用户 ID、代码、国家/地区
TAB2 包含列:用户 ID、代码、电子邮件

示例内容:

TAB1:
RISHI, A1B2C3, INDIA
RISHI, D2E3F4, INDIA
KANTA, G3H4I5, INDONESIA

TAB2:
RISHI, A1B2C3, [email protected]
RISHI, A1B2C3, [email protected]
RISHI, A1B2C3, [email protected]
RISHI, D2E3F4, [email protected]
RISHI, D2E3F4, [email protected]
KANTA, G3H4I5, [email protected]

我想要从 select 查询或 pl/sql 存储过程中得到这样的结果:

RISHI, INDIA, A1B2C3, ([email protected], [email protected], [email protected])
RISHI, INDIA, D2E3F4, ([email protected], [email protected])

如果我进行如下选择:

select a.userid, a.code, a.country, b.email
from tab1.a, tab2.b
where a.userid = b.userid
and a.code = b.code
and a.userid = 'RISHI';

我得到的结果是:

RISHI, INDIA, A1B2C3, [email protected]
RISHI, INDIA, A1B2C3, [email protected]
RISHI, INDIA, A1B2C3, [email protected]
RISHI, INDIA, D2E3F4, [email protected]
RISHI, INDIA, D2E3F4, [email protected]

我基本上需要的是将电子邮件 ID 分组到一个数组中。假设 TAB1 包含更多我实际需要的列,但我在本例中省略了,但 TAB2 只有这三列。

sql oracle stored-procedures select-query tablecolumn
3个回答
2
投票
select a.userid, a.code, a.country, listagg(b.email, ',') within group (order by b.email) as "Emails"
from tab1.a, tab2.b
where a.userid = b.userid
and a.code = b.code
and a.userid = 'RISHI'
group by a.userid, a.code, a.country;

0
投票

我想你想在MySQL中使用

GROUP_CONCAT
聚合函数。坏消息是 Oracle 没有用于组串联的内置函数,好消息是您可以模拟这样的功能。

看这个片段:

with data
     as
     (
          select job,
                ename,
                row_number() over (partition by job order by ename) rn,
                count(*) over (partition by job) cnt
      from emp
     )
 select job, ltrim(sys_connect_by_path(ename,','),',') scbp
  from data
  where rn = cnt
  start with rn = 1
  connect by prior job = job and prior rn = rn-1
  order by job

并且会回来

JOB       SCBP
--------- ----------------------------------------
ANALYST   FORD,SCOTT
CLERK     ADAMS,JAMES,MILLER,SMITH
MANAGER   BLAKE,CLARK,JONES
PRESIDENT KING
SALESMAN  ALLEN,MARTIN,TURNER,WARD

参考


0
投票

选择 listagg(n, ', ')
组内(按 n 排序) con from(从员工中选择部门 ID d, 名字 || ' ' || 姓氏 n 其中部门 ID = 1) ;

CON

爱丽丝·佩里、多丽丝·格雷厄姆、多丽丝·鲍威尔

© www.soinside.com 2019 - 2024. All rights reserved.