雪花中具有未知匹配项的子查询,与列匹配

时间:2021-06-09 19:32:54

标签: snowflake-cloud-data-platform nested-query

我有几个要加入的表,其中一个可以有未知数量的匹配项,最多 6 个。每个匹配项都应作为初始查询中的行值返回。例如:

SELECT a.ID, a.match1, a.match2, a.match3, a.match4, a.match5, a.match6
FROM table1 a, (SELECT ID, match FROM table2 WHERE a.ID = table2.ID) b
WHERE a.ID = b.ID

这可能不是正确的语法,但希望它显示了我需要的东西。所以嵌套查询可以返回 1 个匹配或 5 个匹配。每个匹配应该是对应列名的值,即 a.match1 = 第一个匹配,b.match2 = 第二个匹配等。

如果我需要进一步解释,请告诉我。我知道这不是使用的最佳模式,但它是我被告知要使用的模式。

1 个答案:

答案 0 :(得分:0)

SQL 不喜欢未知数量的列。

作为一个快速的技巧,您可以聚合数组中的所有匹配项,然后围绕它进行查询,将匹配项转换为预定义的(大量)列数。

像这样:

with data as (
select $1 id
from (values(1),(2))
), data2 as (
select $1 id, $2 match
from (values(1, 'a1'),(1, 'a2'),(2, 'b1'),(2, 'b2'),(2, 'b3'))
)

select id, matches[0], matches[1], matches[2], matches[3]
from (
    select a.id, array_agg(match) matches
    from data a
    join data2 b
    on a.id=b.id
    group by 1
);

named aggregation