在变量 plsql 中获取逗号分隔的 ID
Get Comma Separated Ids in variable plsql
我有一个table这样的
id | Name
===========
1 | A
2 | A
3 | A
4 | B
5 | B
6 | C
我正在写 select id from tbl where name = "A", 我想得到所有三个 id (1,2,3) 像这样在一个变量中用逗号分隔然后我想在另一个具有 IN 子句的 select 查询中使用该变量,有什么帮助吗?
正如其他人指出的那样,使用 listagg()
应该可以解决问题:
SELECT listagg(id, ',') WITHIN GROUP (ORDER BY id) as concatenation
FROM mytable
WHERE name = 'A'
这是有效的:
create table ns_1111(col1 number,col2 varchar(20));
insert into ns_1111 values(1,'A');
insert into ns_1111 values(2,'A');
insert into ns_1111 values(3,'A');
insert into ns_1111 values(4,'B');
insert into ns_1111 values(5,'B');
insert into ns_1111 values(6,'C');
SELECT * FROM ns_1111;
select * from (SELECT LISTAGG(col1, ', ') WITHIN GROUP (ORDER BY col1)
FROM ns_1111 group by col2) where rownum<=1 ;
输出:
1, 2, 3
我有一个table这样的
id | Name
===========
1 | A
2 | A
3 | A
4 | B
5 | B
6 | C
我正在写 select id from tbl where name = "A", 我想得到所有三个 id (1,2,3) 像这样在一个变量中用逗号分隔然后我想在另一个具有 IN 子句的 select 查询中使用该变量,有什么帮助吗?
正如其他人指出的那样,使用 listagg()
应该可以解决问题:
SELECT listagg(id, ',') WITHIN GROUP (ORDER BY id) as concatenation
FROM mytable
WHERE name = 'A'
这是有效的:
create table ns_1111(col1 number,col2 varchar(20));
insert into ns_1111 values(1,'A');
insert into ns_1111 values(2,'A');
insert into ns_1111 values(3,'A');
insert into ns_1111 values(4,'B');
insert into ns_1111 values(5,'B');
insert into ns_1111 values(6,'C');
SELECT * FROM ns_1111;
select * from (SELECT LISTAGG(col1, ', ') WITHIN GROUP (ORDER BY col1)
FROM ns_1111 group by col2) where rownum<=1 ;
输出:
1, 2, 3