我有这样的桌子
create table aaa (id int not null, data varchar(50), numb int);
具有这样的数据
begin
for i in 1..30 loop
insert into aaa
values (i, dbms_random.string('L',1),dbms_random.value(0,10));
end loop;
end;
现在我正在做
select a.id, a.data, a.numb,
count(*) over (partition by a.numb order by a.data) count,
b.id, b.data,b.numb
from aaa a, aaa b
where a.numb=b.numb
and a.data!=b.data
order by a.data;
并且我想更新那些数字相同但字母不同的每一行,结果我想拥有一个以上字母的新数据(例如,在数据列“ acde”中),我只想在其中创建串联。我该怎么做?关键是要对数字进行分组,但对于分组的列,我想添加附加值。
这就是开始时的样子
id | data |numb
1 q 1
2 z 8
3 i 7
4 a 2
5 q 4
6 h 1
7 b 9
8 u 9
9 s 4
我想结束
id | data |numb
1 q h 1
2 z 8
3 i 7
4 a 2
5 q s 4
7 b u 9
答案 0 :(得分:1)
尝试一下
SELECT MIN(id),
LISTAGG(data,' ') WITHIN GROUP(
ORDER BY data
) data,
numb
FROM aaa GROUP BY numb
ORDER BY 1
答案 1 :(得分:0)
这会选择10个随机字符串,长度为1-4个字母,单词中的字母可能会重复:
select level, dbms_random.string('l', dbms_random.value(1, 4))
from dual connect by level <= 10
这会选择1到10个随机字符串,长度为1到26个字母,字母不会重复并进行排序:
with aaa(id, data, numb) as (
select level, dbms_random.string('L', 1),
round(dbms_random.value(0, 10))
from dual connect by level <= 30)
select numb, listagg(data) within group (order by data) list
from (select distinct data, numb from aaa)
group by numb