I have the following data set
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
I need to join first value of color_code to first value of color_code_name and second value of color_code to second value of color_code_name etc..
code color
1 blue
2 white
5 black
3 green
4 red
7 pink
9 yellow
I am using the below code, but it is doing cross join since I dont have an id to join upon. This code work if I am mapping 2 columns but not multiple columns.
Could someone help me to get the expected result?
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