2 5 blue

问题描述 投票:-1回答:1

我有以下数据集

color_code   fav_color_code    color_code_name    fav_color_name 
1|2            5                blue|white           black
3|4            7|9              green|red           pink|yellow

我需要把color_code的第一个值加入color_code_name的第一个值,把color_code的第二个值加入color_code_name的第二个值等等。

我的结果应该是这样的。

code                color
1                    blue
2                    white
5                     black
3                     green
4                      red
7                      pink
9                     yellow

我使用下面的代码,但它在做交叉连接,因为我没有id来连接。谁能帮助我得到预期的结果?

 SELECT 
        t1.code AS code, 
        t2.color AS color, 
      FROM 
        (
          SELECT 
            c.value :: varchar AS code, 
            row_number() over(
              order by 
                code
            ) AS rownum 
          FROM 
            table, 
            lateral flatten (
              input => split(color_code, '|')
            ) c  
          UNION 
          SELECT 
            d.value :: varchar AS code, 
            row_number() OVER(
              ORDER BY 
                code
            ) AS rownum
            FROM 
            table, 
            lateral flatten (
              input => split(fav_color_code, '|')
            ) d 
        ) t1 
        JOIN (
          SELECT 
            f.value :: varchar AS color, 
            row_number() OVER(
              ORDER BY 
                color
            ) AS rownum 
          FROM 
            table, 
            lateral flatten (
              input => split(color_code_name, '|')
            ) f 
          UNION 
          SELECT 
            g.value :: varchar AS color, 
            row_number() OVER(
              ORDER BY 
                color
            ) AS rownum 
          FROM 
            table, 
            lateral flatten (
              input => split(fav_color_name, '|')
            ) g 
        ) t2 ON (t1.rownum = t2.rownum) 
      ORDER BY 
        t1.color
````````````````````````````````````````````````````````
Thanks in advance
join split union comma lateral
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.