2017-07-07 17 views
0

同じ列の複数のレコードを2つの異なるテーブルから連結する方法を知っています。例えば以下の私のテーブルは以下のとおりです。Oracle SQL - 複数のテーブルの結果セットの1つの列の同じ列の値を結合する

(注)表:

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

INVOICE表:私はこのクエリと結果を実行することができます

INVOICE AMOUNT 
1000 100 
1111 50 
1234 20 

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

が、私は希望私の結果セットの1つの列に各請求書の注釈を結合するのが好きです。例については、私の結果は、この

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

バージョンのようになりますか? 11g +の 'listagg()'を見てください。連結されたノートがあなたのバージョンの制限を超えない限り。 [この記事も参照](https://oracle-base.com/articles/misc/string-aggregation-techniques) –

+0

それは12.1です。私はlistagg()を試みます。 – jax

+0

[Oracleの複数の行からの列値を連結するための[SQLクエリ]の可能な複製](https://stackoverflow.com/questions/4686543/sql-query-to-concatenate-column-values-from-multiple-rows-in-オラクル) –

答えて

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)ノート INVOMICEからINV INVER.INVOICE = NOTES.INVOICEに関するインナー・ジョイントノート group by INV.INVOICE、INV.AMOUNT' – are

関連する問題