SQL:聚合函数中的条件

时间:2017-06-22 15:02:59

标签: sql oracle stored-procedures conditional-statements

我有以下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。如何在存储过程中实现更好?

1 个答案:

答案 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会为你做这件事,但尽可能避免隐式转换。)