您可以在 DB2 SQL 中订购 listagg 返回值吗?

Posted

技术标签:

【中文标题】您可以在 DB2 SQL 中订购 listagg 返回值吗?【英文标题】:Can you order the listagg return value in DB2 SQL? 【发布时间】:2020-05-05 05:40:52 【问题描述】:

我希望对 listagg 返回值进行排序,如下所示:

name@email.com | 200000#500000# 

Not: 

name@email.com | 500000#200000#

下面是一些示例代码。

我注意到如果我把 ('200000', 'name@email.com') 行放在第一位,它会做我想做的事,但我不能在 CTE 中订购所以我有点迷失了如何获得相同的结果。

WITH TAB (client, email) AS 
(
VALUES 
  ('500000', 'name@email.com'), 
  ('200000', 'name@email.com')
)
SELECT email, listagg(trim(client) || '#', '')
FROM TAB a
GROUP BY email;

【问题讨论】:

【参考方案1】:

使用within group尝试以下操作

WITH TAB (client, email) AS 
(
VALUES 
  ('500000', 'name@email.com'), 
  ('200000', 'name@email.com')
)
SELECT email, listagg(trim(client) || '#', '') within group (ORDER BY client)
FROM TAB a
GROUP BY email; 

【讨论】:

以上是关于您可以在 DB2 SQL 中订购 listagg 返回值吗?的主要内容,如果未能解决你的问题,请参考以下文章

DB2-具有DISTINCT子句的LISTAGG()-不起作用?

我想使用 sql 得到这样的输出。

Redshift SQL - 反向 Listagg 函数

按组的 DB2 逗号分隔输出

Oracle SQL:如何删除 listagg 中的重复项

从 CLOB ListAgg 值中删除 Oracle SQL 中的 HTML 代码