如何让ZINC在LISTAGG聚合结果前置,其余内容正常聚合?
解决方案
你只需要修改LISTAGG函数里的排序逻辑,通过条件判断让ZINC优先排在最前面,其余产品再按原顺序聚合。修改后的SQL脚本如下:
select customer_id, listagg(car_product, '-') within group ( order by case when car_product = 'ZINC' then 0 else 1 end, car_product ) as Product from purchase group by customer_id
逻辑说明
case when car_product = 'ZINC' then 0 else 1 end:给ZINC标记为0,其他产品标记为1,排序时0会排在1前面,确保ZINC始终在聚合结果的最开头。- 第二个排序条件
car_product:保证除ZINC外的其他产品仍按原有的字母顺序聚合。
这样就能实现你要的效果:有ZINC的客户,聚合结果以ZINC开头,其余产品按顺序拼接;没有ZINC的客户则直接按原逻辑聚合所有产品。
内容的提问来源于stack exchange,提问作者Lizzie
相关产品推荐
相关产品推荐

