我正在尝试将每个供应商的发货地点合并到每个供应商的单个列表中,如下所示。
表格数据:
SUPPLIER_NAME|Ship_from|
Supplier A | IOSL1 |
Supplier A | IHMI1 |
Supplier A | IHMI2 |
所需查询输出:
SUPPLIER_NAME| Ship_from |
Supplier A |IOSL1, IHMI1, IHMI2|
看起来LISTAGG可能是实现此目的的最好/最简单的方法,但是我无法按照LISTAGG函数的DB2文档上的文档来使它工作。
SQL:
select
SUPPLIER_ID,
LISTAGG(PROC_FLO_NAME, ', ') within group (order by PROC_FLO_NAME DESC) as Ship_from
from rcx.RXPRF1
group by SUPPLIER_ID
当我尝试运行此查询时,出现一个错误,提示“非法使用关键字GROUP令牌,应该是FROM INTO”,但我一直无法弄清原因。
我正在将DB2版本9.7.500.702修订包5(使用db2level命令找到)与QMF 8.1修订包15(Unicode)一起使用来运行查询。
答案 0 :(得分:1)
LISTAGG被引入到DB2 LUW 9.7 Fix Pack 4中。
https://www.ibm.com/support/knowledgecenter/SSEPGG_9.7.0/com.ibm.db2.luw.wn.doc/doc/c0056050.html
Fix Pack 4还包含以下增强功能: 添加了一个新的聚合函数LISTAGG。 LISTAGG函数通过连接字符串将一组字符串元素聚合为一个字符串。可选地,可以提供分隔符字符串,该分隔符字符串插入相邻的输入字符串之间。有关更多信息,请参见LISTAGG聚合函数。
但是,您(或您的DBA)将需要运行db2updv97
来激活新功能。
http://www-01.ibm.com/support/docview.wss?uid=swg21588635
(甚至更好,升级到Db2 11.1;-)