Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.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
在sql join中,将一对多值连接到一行,并用逗号分隔_Sql_Oracle - Fatal编程技术网

在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上的列数不匹配