我有以下sql:
SELECT LISTAGG((TO_CHAR(ch.count), '|') WITHIN GROUP (ORDER BY ch.Count)
FROM ChG cg
JOIN Ch ch on ch.GroupID = cg.GroupID
WHERE cg.PartyID = cp.PartyID
我想添加条件,伪代码:
if(ch.TYPECODE = 1) then ch.count = 'A' + ch.count
。如何在存储过程中实现更好?
答案 0 :(得分:2)
listagg(case when ch.typecode = 1 then 'A' end || to_char(ch.count), '|') .....
在聚合之前,将检查每一行的条件ch.typecode = 1
。如果是,则'A'
被预先加上(在to_char(ch.count)
之前连接)。我猜这就是你需要的东西。
如果您还需要将'A'
预先设置为ch.count
以获得ORDER BY条件,那么您可以在那里执行相同的操作。您还需要在to_char
内包装。 (如果你不这样做,那么Big Brother Oracle会为你做这件事,但尽可能避免隐式转换。)