编辑 sql 列中的一些值

Edit some values in column sql

我有一个 table:

id param value
1 p1 value1
1 p2 value2
1 p3 value3
1 p4 value4
2 p1 value10
2 p2 value20
2 p5 value50
3 p1 value100
3 p2 value200
3 p4 value400
4 p1 value11
4 p2 value12
4 p3 value12

我想要下一个结果:

id value
1 value1, val,value3
2 value10,val,value50
3 value100,val
4 value11, val, value12

我知道我可以使用 listagg 合并成一行,但我不知道如何只从 p2 中取出 3 个值的字母并将其与其他值一起写在一列中。 我的查询:

 select listagg(p.value, ',') within group (order by p.id asc) from tab p 
where p.param like 'p1' or p.param like 'p3' or p.param like 'p4'
or p.value = (select SUBSTR(m.value, 0, 4) 
from tab m where m.param like 'p2' and m.id = p.id) 
group by p.id

我明白为什么我的查询不正确,但我不知道该怎么做

how to take only 3 values's letters from p2 and write it in one column with other values.

您可以在 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;