首页 > 解决方案 > Redshift SQL - 反向 Listagg 函数

问题描述

假设我有一个如下表:

Name   Order
 AA     1,2
 BB     2,3

我希望我的结果是这样的:

Name   Order
 AA      1
 AA      2
 BB      2
 BB      3

如何在 Redshift 中实现这一点?

谢谢!

标签: sqlstringcsvamazon-redshift

解决方案


假设您事先知道每个分隔列表的最大元素数,您可以使用数字表和 来做到这一点split_part()

select t.name, split_part(t.order, ',', n.n) val
from (
    select 1 n
    union all select 2
    union all select 3
) n
inner join mytable t
    on n.n <= regexp_count(t.order, ',') + 1

n您可以根据需要使用更多数字扩展派生表。也可以row_number()针对大表使用来生成数字表。


推荐阅读