我有一个返回如下数据的查询,需要将值列组合成逗号分隔的字符串,不包括重复项和空值。
g_name g_id v_data
----- ---- ------
Test 123 ABC
Test 123 ABC
Test 123 DEG
Test 123 None
Test 123
Test 123 HIJ
期望的输出:
g_name g_id v_data
----- ---- ------
Test 123 ABC,DEG,HIJ
我尝试过使用XMLAGG
,但无法删除重复项和空值。
select g_name,
g_id,
RTRIM(XMLAGG(XMLELEMENT(e, v_data || ',')).EXTRACT('//text()'), ',')
from tblData
group by g_name, g_id
答案 0 :(得分:1)
只需使用公用表表达式预过滤行,然后执行字符串连接。
with cte1 as (
select distinct *
from tblData
where v_data is not null
)
select g_name,
g_id,
RTRIM(XMLAGG(XMLELEMENT(e, v_data || ',')).EXTRACT('//text()'), ',')
from cte1
group by g_name, g_id
答案 1 :(得分:0)
您可以使用LISTAGG
功能:
select g_name, g_id, listagg(v_data,',') within group (order by v_data) v_data
from (
select distinct g_name, g_id, v_data
from tblData
where v_data is not null
)
group by g_name, g_id
在内部选择中,我们会处理DISTINCT
和NULL
删除(如果您愿意,也可以在此处删除None
。)
外部查询处理按名称和ID分组并连接值