1
使用LISTAGG顯示唯一的值,這些都是表我已經在顯示數據如何通過oracle12c
table1
-----------------------------------------------------
col1 col2 id
1223 ram 254
1232 rajesh 345
table 2
--------------------------------------
id col5 col6 col7 col8
254 1223-1 8789 abc 67
254 1223-2 8790 efg 87
254 1223-3 8791 bcd 67
254 1223-4 8792 abc 87
345 1232-1 7897 cdf 89
345 1232-2 7898 cdf 60
和查詢使用我們用來聯接表
select
t1.col1,
listagg(t2.col5,',') within group(order by t2.col6)as col5,
listagg(t2.col7,',') within group(order by t2.col6)as col7,
listagg(t2.col8,',') within group(order by t2.col6)as col8
from
table1 t1
join table2 t2 on t1.id=t2.id;
group by col1
輸出,同時使用上面的查詢
col1 col5 col7 col8
----------------------------------------------------------------------
1233 1223-1,1223-2,1223-3,1223-4 abc,efg,bcd,abc 67,87,67,87
1232 1232-1,1232-2 cdf,cdf 89,60
預期結果:
col1 col5 col7 col8
--------------------------------------------------------------------
1233 1223-1,1223-2,1223-3,1223-4 abc,efg,bcd 67,87
1232 1232-1,1232-2 cdf 89,60
我們不應該使用Wm_concat,因爲它是無證的。 Col5,col7和Col8應僅由col6訂購。
你有使用'listagg'?我不相信這可以消除重複。我自己寫一個自定義的用戶定義的聚合函數。你可能可以編寫多個連接來獲取不同的值,然後使用'listagg',但效率不高。當你消除重複的「col5」,「col7」和「col8」值時,執行col6命令也可能令人困惑 - 你想按照min(col6),max col6)'還是別的?消除重複之後,一個「col5」值可能對應許多不同的「col6」值。 –
不,我可以使用任何功能來顯示輸出,但列表或字符串應該按col6的順序排列。 –
正如我所說的,「按col6的順序」在聚合行時沒有意義。假設來自'col7'的兩個'abc'值在'col6'爲1和100的行上。'colf'值爲'efg'的行的col6值爲50.如果'abc'在'efg'之前,因爲1 <50?或者'abc'應該在'efg'之後,因爲50 <100? –