App下載

在 Oracle 中的多個連接表上使用 LISTAGG()

智慧女孩不禿頭 2021-09-07 11:11:40 瀏覽數 (3637)
反饋

你可能知道如何在單個表上使用 LISTAGG(),但不知道如何在多個連接表上使用 LISTAGG。此示例演示如何在 Oracle 12g 中對連接的多個表使用聚合函數。

假設我們有以下兩個表。

“用戶”表

ID姓名
111aaa
222bbb
333bbb

“記錄”表

ID標簽價值
111start1
111mid2
111end3
222start1
222end2
333start1
333mid2
333start3

如果我們要選擇所有標有“start”和“end”的值,如下圖,sql查詢怎么寫?

預期結果:

ID姓名聚合值
111aaa1,3
222bbb1,2
333bbb1,3

select u.ID, u.Name, listagg(Value, ', ') within group (order by Tag) as AggValues from User u left outer join Record r on u.ID = r.ID and r.Tag in ('start', 'end') group by u.ID, u.Name;

一個常見的錯誤是缺少最后一個 ?group by? 子句中的字段。每個選擇字段也應該在 ?group by? 子句中。在本例中,我們選擇 ?select? ID 和 Name,因此應該使用 ID 和 Name 對結果進行分組。


0 人點贊