Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle SQL-将同一列中的值合并到多个表的结果集中的一列中_Sql_Oracle_Plsql - Fatal编程技术网

Oracle SQL-将同一列中的值合并到多个表的结果集中的一列中

Oracle SQL-将同一列中的值合并到多个表的结果集中的一列中,sql,oracle,plsql,Sql,Oracle,Plsql,我很想知道如何将同一列中的多条记录从两个不同的表集中到一个表中。例如,下面是我的表格: 注表: 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 我可以运行此查询并

我很想知道如何将同一列中的多条记录从两个不同的表集中到一个表中。例如,下面是我的表格:

注表:

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

查询

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

Oracle的哪个版本?查看11g+上的
listag()
。只要连接的注释不超过您版本的限制。是12.1。我将尝试Listag()。可能是重复的谢谢。但是如果我有很多记录和很多笔记呢。我必须选择每个记录及其备注吗?
with
仅用于样本在数据库中尝试:
select INV.INVOICE,INV.AMOUNT,listag(notes.notes,,)(按INV.INVOICE订购,INV.AMOUNT)INVOICE INVOICE的备注内部连接INVOICE上的备注=notes.INVOICE GROUP BY INV.INVOICE,INV.AMOUNT