Oracle查询DISTINCT结果聚合后如何按条件在字符串开头追加指定前缀
解决方法
你可以通过新增标记位判断是否满足拼接条件,同时把xxx的拼接逻辑移到聚合后的最外层,修改后的SQL如下:
SELECT CASE WHEN has_x = 1 THEN ' xxx' || aggregated_res ELSE aggregated_res END AS RESULTS FROM ( SELECT xmlagg(xmlparse(content RESULTS || '|' wellformed) ORDER BY RESULTS).getclobval() AS aggregated_res, MAX(CASE WHEN result = 'x' THEN 1 ELSE 0 END) AS has_x FROM ( SELECT DISTINCT result, ' ' || result || ' - ' || result_final AS RESULTS FROM myTable WHERE ID = '123456' ) t1 ) t2;
修改说明
- 移除了内层查询中每条记录末尾追加的
xxx,避免每一行结果都带后缀 - 新增
has_x标记位:通过判断当前查询的所有记录里是否存在result = 'x'的行,存在则标记为1,否则为0,仅需一次表查询即可完成判断,性能优于二次查询判断 - 最外层通过
CASE语句做分支判断,满足条件时把xxx拼接到整个聚合结果的最开头,不符合条件直接返回原聚合结果即可
内容的提问来源于stack exchange,提问作者user2102665
相关产品推荐
相关产品推荐

