我有一个表:
id | 参数 | 值||
---|---|---|---|
1 | p1 | 值1 | |
1 | p2 | 值2 | |
1 | p3 | 值3 | |
1 | p4 | 值4 | |
2 | p1 | 值10 | |
2 | p2 | 值20 | |
2 | p5 | 值50 | |
3 | p1 | 值100 | |
3 | p2 | 值200 | |
3 | p4 | 值400 | |
4 | p1 | 值11 | |
4 | p2 | 值12 | |
4 | p3 | 值12 |
如何从p2中只取3个值的字母,并将其与其他值一起写入一列。
您可以在listagg()
:中使用条件逻辑
select listagg(case when p.param = 'p2' then substr(p.value, 1, 3) else p.value end, ',') within group (order by p.id asc)
from tab p
where p.param in ('p1', 'p2', 'p3', 'p4')
group by p.id;