SQL Snowflake - 将 SQL 列表/数组放入列中
SQL Snowflake - Put an SQL list / array into a column
基于特定的项目架构,我有一个 LIST ('Bob', 'Alice')
,我想 SELECT 作为一个列(然后进行特定的 JOIN)。
现在,我做到了:
SELECT *
FROM TABLE(flatten(input => ('Bob', 'Alice'))) as v1
但这导致了一行/两列,我需要一列/两行(以进行 JOIN)。
如果我使用也一样:
select * from (values ('Bob', 'Alice'))
基本思路是 PIVOT,但是,列表可能具有任意长度,因此我无法手动列出 PIVOT 查询中的所有列名...
我也不能使用以下(这会起作用):
select * from (values ('Bob'), ('Alice'))
因为我将列表作为字符串继承,无法动态修改它。
如果输入以 ('Bob','Alice')
形式提供,则可以使用 STRTOK_SPLIT_TO_TABLE:
SELECT table1.value
FROM table(strtok_split_to_table($$('Bob','Alice')$$, '(),''')) AS table1;
输出:
如果您有一组固定的值想要加入,并且查看其中的一些 SQL 您已尝试使用 VALUES 的正确形式是:
select * from (values ('Bob'), ('Alice'));
或
select * from values ('Bob'), ('Alice');
如果你有一个存在的数组,你可以像第一个例子那样展平它
SELECT v1.value::text
FROM TABLE(flatten(input => array_construct('Bob', 'Alice'))) as v1;
V1.VALUE::TEXT
Bob
Alice
或者如果您有一个字符串“Bob, Alice”,那么 SPLIT_TO_TABLE
SELECT trim(v1.value)
FROM TABLE(split_to_table('Bob, Alice', ',')) as v1;
基于特定的项目架构,我有一个 LIST ('Bob', 'Alice')
,我想 SELECT 作为一个列(然后进行特定的 JOIN)。
现在,我做到了:
SELECT *
FROM TABLE(flatten(input => ('Bob', 'Alice'))) as v1
但这导致了一行/两列,我需要一列/两行(以进行 JOIN)。
如果我使用也一样:
select * from (values ('Bob', 'Alice'))
基本思路是 PIVOT,但是,列表可能具有任意长度,因此我无法手动列出 PIVOT 查询中的所有列名...
我也不能使用以下(这会起作用):
select * from (values ('Bob'), ('Alice'))
因为我将列表作为字符串继承,无法动态修改它。
如果输入以 ('Bob','Alice')
形式提供,则可以使用 STRTOK_SPLIT_TO_TABLE:
SELECT table1.value
FROM table(strtok_split_to_table($$('Bob','Alice')$$, '(),''')) AS table1;
输出:
如果您有一组固定的值想要加入,并且查看其中的一些 SQL 您已尝试使用 VALUES 的正确形式是:
select * from (values ('Bob'), ('Alice'));
或
select * from values ('Bob'), ('Alice');
如果你有一个存在的数组,你可以像第一个例子那样展平它
SELECT v1.value::text
FROM TABLE(flatten(input => array_construct('Bob', 'Alice'))) as v1;
V1.VALUE::TEXT |
---|
Bob |
Alice |
或者如果您有一个字符串“Bob, Alice”,那么 SPLIT_TO_TABLE
SELECT trim(v1.value)
FROM TABLE(split_to_table('Bob, Alice', ',')) as v1;