编辑 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;
我有一个 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;