Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Snowflake cloud data platform 雪花列表`_Snowflake Cloud Data Platform_Listagg_Snowflake Task - Fatal编程技术网

Snowflake cloud data platform 雪花列表`

Snowflake cloud data platform 雪花列表`,snowflake-cloud-data-platform,listagg,snowflake-task,Snowflake Cloud Data Platform,Listagg,Snowflake Task,我试图在我的子查询中使用snowflake Listag函数 我就是这样做的,但我没有得到任何结果: SELECT * FROM table WHERE uuid IN (SELECT LISTAGG(''''||uuid||'''', ',') as UUIDS from same_table WHERE condition1 = true AND condition2 = true ORDER BY some_variable) 当我刚刚运行子查询时,它会给出这样的正确结果 SELECT

我试图在我的子查询中使用snowflake Listag函数 我就是这样做的,但我没有得到任何结果:

SELECT * FROM table WHERE uuid IN (SELECT LISTAGG(''''||uuid||'''', ',') as UUIDS from same_table WHERE condition1 = true AND condition2 = true ORDER BY some_variable)
当我刚刚运行子查询时,它会给出这样的正确结果

SELECT LISTAGG(''''||UUID||'''', ',') AS UUIDS FROM same_table WHERE condition1 = true AND condition2 = true ORDER BY some_variable

Result:
'ad','adsa','sad'
SELECT * FROM table WHERE uuid IN ('ad','adsa','sad')
当我像这样直接使用查询时,它给出了正确的结果

SELECT LISTAGG(''''||UUID||'''', ',') AS UUIDS FROM same_table WHERE condition1 = true AND condition2 = true ORDER BY some_variable

Result:
'ad','adsa','sad'
SELECT * FROM table WHERE uuid IN ('ad','adsa','sad')
但是我无法理解为什么它不能直接在in子句中工作。 任何帮助都将不胜感激

uuid是一个varchar(13),如果这有帮助的话

编辑: 你好,菲利佩霍法。我必须使用聚合,因为最终我必须在一个列中获取UUID,然后在另一个查询中使用它。想象一下,如果您有多个这样的列:

uuid.                amount              tax
adsa.                  5000.             100
ad.                     100.              10
sad.                   7000.             154
那我想要像这样的东西

uuids.                              amount.            tax.  
'ad, adsa, sad'.                     12100.            264. 

为什么它会起作用?Listagg创建一个字符串,而IN正在查找一组值(如列)

因此,如果你做一个listagg,你会得到'a,b,c'而不是['a','b','c',最后你的in将用于'a,b,c'字符串,但不用于'a'或'b'或'c'。要查找其中任何一个,您需要使用子字符串。以下是一些例子:


根据编辑中的示例输入和输出,类似的内容应该可以工作:

SELECT LISTAGG(uuid), SUM(amount), SUM(tax)
FROM TABLE
WHERE uuid IN
    (SELECT uuid
     FROM same_table
     WHERE condition1 = TRUE
       AND condition2 = TRUE
     )
;
如果这不是您想要的,那么有一个更完整的输入和所需输出示例会有所帮助


如果不希望重复相同的uuid,您可能还需要添加一个独特的,即listagg(独特的uuid)。

为什么需要
listagg()
?您可能可以在()中执行
,而不使用它。