【发布时间】:2017-12-11 21:17:35
【问题描述】:
USER_ID COLUMN1 COLUMN2
JOHN 24 CA
JOHN 24 LA
JOHN 63 CA
JOHN 63 LA
JOHN 66 CA
JOHN 66 LA
JOHN 9 AF
JOHN 9 AL
JOHN 9 AW
JOHN 9 DF
需要的输出:
USER_ID RESULT
JOHN 24~CA-LA + 63~CA-LA + 66~CA-LA + 9~AF-AL-AW-DF
这是我的要求。我正在尝试listagg():
select USER_ID,
(listagg(case when seqnum_p = 1 then COLUMN1 end, '-') within group (order by COLUMN1) ||
'~' ||
listagg(case when seqnum_b = 1 then COLUMN2 end, '-') within group (order by COLUMN2)
) as result
from (select TABLE.*,
row_number() over (partition by USER_ID, COLUMN1 order by COLUMN1) as seqnum_p,
row_number() over (partition by USER_ID, COLUMN2 order by COLUMN2) as seqnum_b
from TABLE
)
group by USER_ID;
当前输出:
JOHN || AF-AL-AW-CA-DF-LA~24-63-66-9
【问题讨论】:
-
你试过了吗? Stack Overflow 不是免费的抽水式代码编写服务。
-
:) yes select USER_ID, (listagg(case when seqnum_p = 1 then COLUMN1 end, '-') in group (order by COLUMN1) || '~' || listagg(case when seqnum_b = 1 然后 OFFICE_CODE end, '-') 在组内 (按 OFFICE_CODE 排序) 作为结果来自 (select TABLE.*, row_number() over (partition by USER_ID, COLUMN1 order by COLUMN1) as seqnum_p, row_number() over (partition by USER_ID, OFFICE_CODE order by OFFICE_CODE) as seqnum_b from TABLE ) group by USER_ID; @TimBiegeleisen
-
我可以隔离但不符合我的正确要求@TimBiegeleisen
-
请将其作为格式化代码添加到您的问题中,并解释其中的问题 - 错误、错误结果等。然后删除评论版本。
-
是的,@AlexPoole 解释道
标签: sql oracle oracle11g string-concatenation listagg