显示在SQL查询连接值

问题描述 投票:2回答:1

我想加入我的第一个SQL查询与表类型,显示如下的id_pr value.ID_PR值重复。我想说明从逗号分隔符为同一id_pr和rodz_st值连接起来ident_st列的所有值。例如:对于显示rodz_st = 'DZE' 和id_pr = 13所有ident_st值。

第一查询:

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与串联声明加入即可显示结果?

sql oracle oracle11g oracle11gr2 listagg
1个回答
3
投票

您可以使用列表LISTAGG功能与DECODE

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;

SQL Fiddle Demo

© www.soinside.com 2019 - 2024. All rights reserved.