Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.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查询中显示连接的值_Sql_Oracle_Oracle11g_Oracle11gr2_Listagg - Fatal编程技术网

在SQL查询中显示连接的值

在SQL查询中显示连接的值,sql,oracle,oracle11g,oracle11gr2,listagg,Sql,Oracle,Oracle11g,Oracle11gr2,Listagg,我想将我的第一个sql查询与下面通过id\u pr value显示的表类型连接起来。id\u pr值重复。我想显示同一个id_pr和rodz_st值的ident_st列中用逗号分隔符连接的所有值。例如:显示rodz_st='DZE'和id_pr=13的所有标识值 第一个问题: SELECT NAME, NO FROM ORDERS o LEFT JOIN TYPES t ON t.ID_ZM = o.ID_PR 表顺序: ID ID_ZM NAME NO -----

我想将我的第一个sql查询与下面通过id\u pr value显示的表类型连接起来。id\u pr值重复。我想显示同一个id_pr和rodz_st值的ident_st列中用逗号分隔符连接的所有值。例如:显示rodz_st='DZE'和id_pr=13的所有标识值

第一个问题:

SELECT NAME, NO FROM ORDERS o
LEFT JOIN TYPES t ON t.ID_ZM = o.ID_PR
表顺序:

  ID        ID_ZM NAME    NO  
---------- ---------- ------- --------
    1        12   Dee     333
    2        13   Rods    111
表格类型:

ID    ID_PR  RODZ_ST   IDENT_ST   
---------- ---------- ------- --------
16    12      JEW     646101_1
10    12      JEW     236496_2
11    13      JEW     147301_5
15    13      DZE     259435_1
12    13      OBR     452171_3
13    13      OBR     286432_6
17    12      DZE     618054_1
19    13      DZE     182235_4
我希望得到如下结果:

NAME    NO      JEW               DZE                  OBR
------- -----  ---------------- ------------------  -----------------
Dee     333   646101_1, 236496_2 618054_1
Rods    111   147301_5           259435_1, 182235_4 452171_3, 286432_6

问题:如何使用连接语句创建sql join以获得显示结果?

您可以将list
LISTAGG
函数与
解码一起使用:

SELECT NAME, NO, 
       LISTAGG(DECODE(RODZ_ST,'JEW',IDENT_ST,NULL), ',') WITHIN GROUP (ORDER BY t.ID DESC, RODZ_ST) AS JEWS,
       LISTAGG(DECODE(RODZ_ST,'DZE',IDENT_ST,NULL), ',') WITHIN GROUP (ORDER BY t.ID , RODZ_ST) AS DZE,
       LISTAGG(DECODE(RODZ_ST,'OBR',IDENT_ST,NULL), ',') WITHIN GROUP (ORDER BY t.ID , RODZ_ST) AS OBR
  FROM ORDERS o
   LEFT JOIN TYPES t ON t.ID_PR = o.ID_ZM
  GROUP BY NAME, NO;

@KhanM我添加了一个演示