此查询似乎在Db2 v11.5.7.0中有效:
SELECT listagg(DISTINCT x, ',') WITHIN GROUP (ORDER BY x)
FROM (VALUES (1), (1), (2)) t (x)
但它失败于:
SQL错误[42822]:ORDER BY子句中以下位置的表达式或“ORDER BY”子句中以“”开头的表达式无效。原因代码=“2”.. SQLCODE= -214,SQLSTATE=42822,DRIVER=4.29.24
除了x
本身,我还可以在ORDER BY
子句中使用其他什么东西?注意,这个问题与DISTINCT
有关。
SELECT listagg(x, ',') WITHIN GROUP (ORDER BY x)
FROM (VALUES (1), (1), (2)) t (x)
并产生预期输出:
1,1,2
1条答案
按热度按时间ux6nzvsh1#
这是记录的行为。According to the docs:
如果为LISTAGG指定了DISTINCT,则ORDER BY规范的 sort-key 必须与 string-expression(SQLSTATE 42822)匹配。如果 string-expression 是隐式转换,则 sort-key 必须显式包括相应的匹配转换规范。
因此,可能的解决方法是:
当然,这种顺序可能与预期的顺序不同,因此这种变通方法可能不适用于所有输入数据!