Snowflake cloud data platform 我想创建一个带有分隔值的列
我有Vin列和图像url列 对于每个vin,我有5个图像url 我想将其减少到每vin 1行,并在分隔字段中包含1 vin的所有图像url Vin URLSnowflake cloud data platform 我想创建一个带有分隔值的列,snowflake-cloud-data-platform,Snowflake Cloud Data Platform,我有Vin列和图像url列 对于每个vin,我有5个图像url 我想将其减少到每vin 1行,并在分隔字段中包含1 vin的所有图像url Vin URL 12345 url1 | url2 | url3 | url4 | url5如果要将值聚合到分隔字符串中,我建议使用Snowflake函数。以下是一个简单的例子: WITH CTE_VIN_URLS AS ( SELECT $1 AS VIN ,$2 AS URL FROM VALUES (1
12345 url1 | url2 | url3 | url4 | url5如果要将值聚合到分隔字符串中,我建议使用Snowflake函数。以下是一个简单的例子:
WITH CTE_VIN_URLS AS (
SELECT $1 AS VIN
,$2 AS URL
FROM VALUES
(12345, 'url1')
,(12345, 'url3')
,(12345, 'url5')
,(12345, 'url2')
,(12345, 'url4')
,(23456, 'url7')
,(23456, 'url8')
,(23456, 'url6')
)
SELECT VIN
,LISTAGG(URL, '|') WITHIN GROUP (ORDER BY URL) AS URLS
FROM CTE_VIN_URLS
GROUP BY VIN
ORDER BY VIN
;
请注意,我有意以未排序的顺序显示这些值,以突出显示可选的在GROUP(order BY…)
子句中的使用
也就是说,我会考虑用数组替换分隔的字符串(在Snowflake中作为第一类数据类型本机支持)。在这种情况下,我将使用Snowflake的函数:
WITH CTE_VIN_URLS AS (
SELECT $1 AS VIN
,$2 AS URL
FROM VALUES
(12345, 'url1')
,(12345, 'url3')
,(12345, 'url5')
,(12345, 'url2')
,(12345, 'url4')
,(23456, 'url7')
,(23456, 'url8')
,(23456, 'url6')
)
SELECT VIN
,ARRAY_AGG(URL) WITHIN GROUP (ORDER BY URL) AS URLS
FROM CTE_VIN_URLS
GROUP BY VIN
ORDER BY VIN
;
谢谢你的帮助