【发布时间】:2019-07-01 10:55:17
【问题描述】:
由于 wm_concat 在 oracle 12C 中已弃用,我需要修改以下查询,我尝试使用 LISTAGG 但它不起作用
SELECT WM_CONCAT(CLRR.CLNTNUM)
|| '#'
||WM_CONCAT(trim(trim(clnt.salutl)
|| ' '
|| trim(clnt.lgivname)
|| ' '
|| trim(clnt.lsurname)))
FROM ODSLIFEASIA.CLRRPF CLRR,
odslifeasia.clntpf clnt
WHERE clnt.clntnum = CLRR.CLNTNUM
AND CLRRROLE = 'LF'
AND clnt.validflag IN ('1', '3')
AND NVL(USED2B, 'X') <> 'U'
AND rownum <5;
我尝试了下面的代码,但它不起作用:
SELECT LISTAGG(CLRR.CLNTNUM,',') within group (order by CLRR.CLNTNUM)--WM_CONCAT(CLRR.CLNTNUM)
|| '#'
||LISTAGG(trim(trim(clnt.salutl,',') within group (order by CLRR.clnt.salutl)--WM_CONCAT(trim(trim(clnt.salutl)
|| ' '
|| trim(clnt.lgivname)
|| ' '
|| trim(clnt.lsurname)))
FROM ODSLIFEASIA.CLRRPF CLRR,
odslifeasia.clntpf clnt
WHERE clnt.clntnum = CLRR.CLNTNUM
AND CLRRROLE = 'LF'
AND clnt.validflag IN ('1', '3')
AND NVL(USED2B, 'X') <> 'U'
AND rownum <5;
我尝试了下面的代码,但它不起作用:
SELECT LISTAGG(CLRR.CLNTNUM,',') within group (order by CLRR.CLNTNUM)--WM_CONCAT(CLRR.CLNTNUM)
|| '#'
||LISTAGG(trim(trim(clnt.salutl,',') within group (order by CLRR.clnt.salutl)--WM_CONCAT(trim(trim(clnt.salutl)
|| ' '
|| trim(clnt.lgivname)
|| ' '
|| trim(clnt.lsurname)))
FROM ODSLIFEASIA.CLRRPF CLRR,
odslifeasia.clntpf clnt
WHERE clnt.clntnum = CLRR.CLNTNUM
AND CLRRROLE = 'LF'
AND clnt.validflag IN ('1', '3')
AND NVL(USED2B, 'X') <> 'U'
AND rownum <5;
我无法使用LISTAGG 获得输出,但使用wm_concat 我得到了:
53155087,53155088,53155089,53155090#MR IONE 包销,MR IONE 包销,MR IONE 包销,MR IONE 包销
和我期待的一样
【问题讨论】:
-
很少有人能够在不运行一些 SQL 的情况下为您提供帮助,因此您可能需要在您的问题中添加一些示例数据。
-
“没用”是什么意思?您是否收到一些错误代码,或者没有按您的意愿返回?顺便说一句,由于
trim(clnt.lsurname)))末尾的括号很重,并且第三行末尾缺少括号,查询似乎有错字。 -
另外
order by CLRR.clnt.salutl(在第二个 LISTAGG 中)不代表任何列。应该是order by clnt.salutl -
“它不起作用”没有帮助。我们无权访问您的数据,看不到您屏幕上的内容,也不知道“它不起作用”是什么意思。请使用
edit按钮编辑您的问题,并解释您的每个示例查询“它不起作用”的含义。谢谢。
标签: sql oracle string-aggregation