2017-03-04 71 views
1

我有一個sql查詢使用listagg函數來創建一個逗號分隔列表到一個正常工作的返回字段。但是,我只想包括順序排列的結果序列號爲順序的結果。它們都必須從0開始,但沒有特定的結束序列號。他們有時會跳過序列號,所以我想刪除這些只返回來自oracle的順序編號值

因此,例如,我想包括像這樣

0 
0,1 
0,1,2 
0,1,2,3 

值,但我想跳過結果看起來像

1 
0,2 
0,1,3 
0,0,2 

是否有一些SQL語法可以將值過濾出來?

+0

請編輯您的問題和(1)顯示您正在使用的查詢和(2)顯示示例數據。 –

回答

2

你或許可以用having條款做到這一點:

select listagg(col, ',') . . . 
from t 
group by . . . 
having min(col) = 0 and 
     count(*) = count(distinct col) and 
     max(col) = count(*) - 1 

這些條件應保證與非連續的值的行被過濾掉。

+0

謝謝,這關注了大部分問題,但我意識到我們有重複序列號的情況。我只是將其添加到示例中。我認爲在這種情況下,建議的代碼可能會將0,0,2混淆爲可接受的結果。 – Jonjilla

+0

@Jonjilla。 。 。不,它不會。這些條件考慮到了這一點。 –

+0

我明白了。我沒有注意到這個區別。謝謝! – Jonjilla