我正在尝试取消一些代码的嵌套
我有几个具有数组的列,两个列都使用| 作为决定者
我想像这样输出它, 我试图做另一个不必要的列,像这样
SELECT c.campaign, c.country, a.product_name, u.price--, u.price -- add price to this split. handy for QBR
FROM c, UNNEST(split(price, '|')) u(price), UNNEST(split(product_name, '|')) a(product_name)
group by 1,2, 3, 4
Run Code Online (Sandbox Code Playgroud)
但这重复了几行,所以我不确定取消嵌套两列是否行得通
谢谢
您的查询的问题在于,该子句FROM c, UNNEST(...), UNNEST(...)有效地计算c了UNNEST调用的每个派生表和每个派生表产生的行之间的交叉联接。
您可以通过一次调用取消嵌套所有数组来解决此问题UNNEST,从而产生一个派生表。当以这种方式使用时,UNNEST生成一个表,其中每个数组一行,而数组中每个元素一行。如果数组的长度不同,则将生成最大数组中最多元素数的行,并NULL为较小数组的列填充。
为了说明您的情况,这就是您想要的:
WITH data(a, b, c) AS (
VALUES
('a|b|c', '1|2|3', 'CAD'),
('d|e|f', '4|5|6', 'USD')
)
SELECT t.a, t.b, data.c
FROM data, UNNEST(split(a, '|'), split(b, '|')) t(a, b)
Run Code Online (Sandbox Code Playgroud)
产生:
a | b | c
---+---+-----
a | 1 | CAD
b | 2 | CAD
c | 3 | CAD
d | 4 | USD
e | 5 | USD
f | 6 | USD
(6 rows)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1095 次 |
| 最近记录: |