2017-07-07 159 views
0

我想知道如何將來自同一列的多個記錄從兩個不同的表中合併到一個表中。例如下面是我的表:Oracle SQL - 結合多個表結果集中一列中同一列中的值

注表:

INVOICE NOTES 
1000 REPLACE PUMP 
1000 REPLACE OIL 
1000 REPLACE FILTER 
1111 WO# 123 
1111 REPLACE GASKET 
1234 REPLACE OIL 

發票表:

INVOICE AMOUNT 
1000 100 
1111 50 
1234 20 

我可以運行此查詢,並將結果:

SELECT INV.INVOICE, INV.AMOUNT FROM INVOICE INV 
INNER JOIN NOTES ON INV.INVOICE = NOTES.INVOICE 

但我會比如將結果集中一列中的每張發票的註釋合併在一起。對於例子我的結果應該是這樣的

INVOICE AMOUNT  NOTES 
1000  100  REPLACE PUMP, REPLACE OIL, REPLACE FILTER 
1111  50   WO# 123,REPLACE GASKET 
1234  20   REPLACE OIL 
+2

哪個Oracle的版本?看看11g +上的listagg()。只要連接的筆記不超過您的版本的限制。 [另見本文](https://oracle-base.com/articles/misc/string-aggregation-techniques)。 –

+0

它是12.1。我會嘗試listagg()。 – jax

+0

[SQL查詢來連接Oracle中多行的列值]的可能重複(https://stackoverflow.com/questions/4686543/sql-query-to-concatenate-column-values-from-multiple-rows-in- oracle) –

回答

1

documentation - listagg

查詢

with inv_notes as 
(select 1000 as INVOICE, 'REPLACE PUMP' as notes from dual union all 
select 1000, 'REPLACE PUMP' from dual union all 
select 1000, 'REPLACE OIL' from dual union all 
select 1000, 'REPLACE FILTER' from dual union all 
select 1111, 'WO# 123' from dual union all 
select 1111, 'REPLACE GASKET' from dual union all 
select 1234, 'REPLACE OIL' from dual 
) 
, 
inv_amount as (
select 1000 as INVOICE, 100 AMOUNT from dual union all 
select 1111, 50 from dual union all 
select 1234, 20 from dual) 
select a.invoice, a.amount, listagg(n.notes, ',') WITHIN GROUP (ORDER BY a.invoice, a.amount) notes 
from inv_notes n 
inner join inv_amount a on n.invoice = a.invoice 
group by a.invoice, a.amount 

結果

1 1000 100 REPLACE FILTER,REPLACE OIL,REPLACE PUMP,REPLACE PUMP 
2 1111 50 REPLACE GASKET,WO# 123 
3 1234 20 REPLACE OIL 
+0

謝謝。但是如果我有很多記錄和很多筆記呢。我必須用他們的筆記選擇每個記錄嗎? – jax

+0

'with'僅適用於樣本 – are

+1

請在您的數據庫中嘗試以下代碼:'SELECT INV.INVOICE,INV.AMOUNT,listagg(NOTES.notes,',')WITHIN GROUP(ORDER BY INV.INVOICE,INV.AMOUNT)筆記 FROM INVOICE INV IN.IN JOIN NOTES ON INV.INVOICE = NOTES.INVOICE group by INV.INVOICE,INV.AMOUNT' – are

相關問題