除了需要有条件地选择记录外,我需要使用listagg(distinct somestring)
,因此我在listagg
中合并了一个case语句。
这是有效的代码示例:
listagg(case when level_1='Brakes' and service_r_L>0.8 then level_2 else null end ,'+') within group (order by level_2 asc ) as Brake_services
但是我需要listagg(DISTINCT level_2 , '+')
,但无法将DISTINCT放在任何地方。
抱歉,SQL代码是小写的,可能只有我一个人不愿意大写我的SQL代码。
答案 0 :(得分:0)
Oracle 19c允许这样做:LISTAGG DISTINCT in Oracle Database 19c在本文中,您可以找到两种19c以前的解决方案:首先准备不同的值,或者使用row_number()。还有第三种方法,即正则表达式,用于删除输出中的重复项。这是第一个例子,可能会对您有所帮助。如果没有,请编辑您的问题,告诉我们您使用的是哪个Oracle版本,向我们显示您的完整查询和示例数据,最好像我一样使用dbfiddle。
select id_grp, listagg(case when level_1 = 'Brakes' and srl = 1
then level_2 end ,'+')
within group (order by level_2 asc ) as brake_services
from (select distinct id_grp, level_1, level_2,
case when service_r_l > .8 then 1 else 0 end srl from t)
group by id_grp