gpt4 book ai didi

sql - 如何在没有 NULL 结果的情况下连接值(Snowflake)

转载 作者:行者123 更新时间:2023-12-02 02:51:09 26 4
gpt4 key购买 nike

我正在尝试在 Snowflake 中连接非空值。

我当前的代码:

            CONCAT(
CASE WHEN Red='TRUE' THEN 'Red, ' ELSE '' END ||
CASE WHEN Blue='TRUE' THEN 'Blue, ' ELSE '' END ||
CASE WHEN Black='TRUE' THEN 'Black, ' ELSE '' END ||
CASE WHEN White='TRUE' THEN 'White, ' ELSE '' END)

Return:
Red, White, Black,
Black,
...

Want:
Red, White, Black
Black

在 Mysql 中,我会使用 Concat_WS,但在 Snowflake 中,如果一个值为 NULL,则 NULL 将在 Return 中:

            CONCAT_WS(', ',
CASE WHEN Red='TRUE' THEN 'Red' ELSE NULL END,
CASE WHEN Blue='TRUE' THEN 'Blue' ELSE NULL END,
CASE WHEN Black='TRUE' THEN 'Black' ELSE NULL END,
CASE WHEN White='TRUE' THEN 'White' ELSE NULL END)

最佳答案

有点晚了,但我遇到了同样的问题并找到了不同的解决方案:

正如在 CONCATWS_CONCAT 之前正确指出的那样,当它们的任何参数为 NULL 时,它们总是返回 NULL .

但是,由于 Snowflake 具有 ARRAY 的概念(即支持半结构化数据),即我们可以执行以下操作:

  1. 使用 array_construct 将原始值收集到数组中
  2. 使用 array_compact 从数组中删除 NULL
  3. 使用array_to_string将剩余的数组项连接成一个字符串

这里是修改代码,使用数组:

select array_to_string(array_compact(array_construct( 
CASE WHEN Red = 'TRUE' THEN 'Red' ELSE NULL END,
CASE WHEN Blue = 'TRUE' THEN 'Blue' ELSE NULL END,
CASE WHEN Black = 'TRUE' THEN 'Black' ELSE NULL END,
CASE WHEN White = 'TRUE' THEN 'White' ELSE NULL END)), ', ') as result
FROM values
( true, true, false, false ),
( true, false, false, true ),
( false, false, true, false ),
( false, true, false, true ),
( true, true, true, true )
v(red,blue,black,white);

编辑:您也可以使用 array_construct_compact ,它是 array_constructarray_compact

的精简版

关于sql - 如何在没有 NULL 结果的情况下连接值(Snowflake),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61964538/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com