Snowflake cloud data platform 我想创建一个带有分隔值的列

Snowflake 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

我有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
           (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
;

谢谢你的帮助