DB2-具有DISTINCT子句的LISTAGG()-不起作用?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DB2-具有DISTINCT子句的LISTAGG()-不起作用?相关的知识,希望对你有一定的参考价值。
我的查询中有一列包含少量值,因此我需要在每个分组结果集的单个字段中显示它们-例如如果我有3个不同部门的员工,我希望看到类似>>的内容
EMPID DEPTS SOMENUMBER SOMEOTHERNUMBER ------ ------ ----------- --------------- 0001 ACCOUNTING, CUST SERVICE, CALL CENTER 100 200
问题是该员工有多个重复的部门。我看到了很多关于如何为Oracle和其他DMBS解决这一问题的问题,但没有专门针对DB2的问题。 IBM在https://www.ibm.com/support/knowledgecenter/SSFMBX/com.ibm.swg.im.dashdb.sql.ref.doc/doc/r0058709.html处的文档说:-“如果指定了DISTINCT,将消除重复的字符串表达式值。”,以及-“如果为LISTAGG指定DISTINCT,则ORDER BY规范的排序键必须与string-expression(SQLSTATE 42822)匹配。如果string-expression是隐式转换的,则排序键必须显式包括相应的匹配转换规范。 。
作为一个简单的例子:
with mylist (field1) as ( values 'A','A','B','C','D','A','C' ) select listagg (distinct field1, ', ') within group (order by field1) from mylist;
IBM页面上的信息表明,这应该返回'A,B,C,D',但我却得到了'A。 A. A. B,C。C,D'。
我应该能够通过让子查询进行一些初始汇总来解决此问题-例如
SELECT EMPLOYEE, LISTAGG(DEPARTMENT,', '), SUM(SOMENUMBER) SOMENUMBER, SUM(SOMEOTHERNUMBER) SOMEOTHERNUMBER from ( SELECT EMPLOYEE, DEPARTMENT, SUM(SOMENUMBER) SOMENUMBER, SUM(SOMEOTHERNUMBER) SOMEOTHERNUMBER FROM EMPLOYEES GROUP BY EMPLOYEE, DEPARTMENT) ) GROUP BY EMPLOYEE
实际上,我想这就是我要做的,但是IBM文档确实建议DISTINCT应该做到这一点。我想念什么?
我的查询中有一列包含少量值,因此我需要在每个分组结果集的单个字段中显示它们-例如如果我有3个不同部门的员工,我想...
您尚未指定,但是如果像我一样使用DB2 9.7 LUW,则LISTAGG(DISTINCT ..
仍不起作用。您必须通过XML函数来解决它,例如。 g。:
以上是关于DB2-具有DISTINCT子句的LISTAGG()-不起作用?的主要内容,如果未能解决你的问题,请参考以下文章
H2 用户定义的聚合函数 ListAgg 不能在第一个参数上使用 DISTINCT 或 TRIM()