【发布时间】:2020-08-22 17:09:49
【问题描述】:
我有以下数据集
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
我需要将join 的第一个值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 到 join。如果我映射 2 列而不是多列,则此代码有效。
有人可以帮我得到预期的结果吗?
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
【问题讨论】: