在sql join中,将一对多值连接到一行,并用逗号分隔
我有一个联接,它与一个表共享一对多关系。我希望,不是返回此值,而是:在sql join中,将一对多值连接到一行,并用逗号分隔,sql,oracle,Sql,Oracle,我有一个联接,它与一个表共享一对多关系。我希望,不是返回此值,而是: 125|PROGRAM1|OEM2|1 125|PROGRAM1|OEM2|2 125|PROGRAM1|OEM2|3 我想返回这样一行: 125|PROGRAM1|OEM2|1,2,3 下面是我现在运行的sql: select d.layout_id,d.pgm_nm,d.corp_nm from io_layout_output d join (select f.program_nm, c.corp_nm
125|PROGRAM1|OEM2|1
125|PROGRAM1|OEM2|2
125|PROGRAM1|OEM2|3
我想返回这样一行:
125|PROGRAM1|OEM2|1,2,3
下面是我现在运行的sql:
select d.layout_id,d.pgm_nm,d.corp_nm from io_layout_output d
join (select f.program_nm, c.corp_nm from file_config f
join corp_config c
on f.output_id = c.output_id
where f.output_id = 112) b
on d.pgm_nm = b.program_nm and d.corp_nm = b.corp_nm
如何获得正确的输出?您需要为此使用一个函数。看 编辑: 上次我使用Oracle时,您可以使用GROUPBY使用LISTAGG。我只是看了一下文件,它不再提了。如果上述方法不起作用,请按以下方法操作:
select d.layout_id,
d.pgm_nm,
LISTAGG(d.corp_nm, ', ')
WITHIN GROUP (ORDER BY d.layout_id, d.pgm_nm) as corp_nm
from io_layout_output d
join (select f.program_nm,
c.corp_nm
from file_config f
join corp_config c
on f.output_id = c.output_id
where f.output_id = 112) b
on d.pgm_nm = b.program_nm
and d.corp_nm = b.corp_nm
注意:我只是演示如何使用该函数。根本没有看你的问题。添加此注释是因为结果数据与SQL上的列数不匹配,因此需要使用函数来完成此操作。看 编辑: 上次我使用Oracle时,您可以使用GROUPBY使用LISTAGG。我只是看了一下文件,它不再提了。如果上述方法不起作用,请按以下方法操作:
select d.layout_id,
d.pgm_nm,
LISTAGG(d.corp_nm, ', ')
WITHIN GROUP (ORDER BY d.layout_id, d.pgm_nm) as corp_nm
from io_layout_output d
join (select f.program_nm,
c.corp_nm
from file_config f
join corp_config c
on f.output_id = c.output_id
where f.output_id = 112) b
on d.pgm_nm = b.program_nm
and d.corp_nm = b.corp_nm
注意:我只是演示如何使用该函数。根本没有看你的问题。添加此注释是因为结果数据与SQL上的列数不匹配