2017-06-22 89 views
0

我有以下SQL: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

你是什麼意思的'''ch.count'?你的意思是連接? Oracle使用'||'來代替,而不是加號。 – mathguy

回答

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內包裝。 (如果你不這樣做,無論如何Oracle老大會爲你做,但儘量避免隱式轉換。)