在 SQL 查询中显示串联值
Show concatenated values in SQL Query
我想加入我的第一个 sql 查询 table 下面显示的类型 id_pr value.ID_PR 值重复。我想显示 ident_st 列中的所有值,这些值与相同的 id_pr 和 rodz_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
table 订单:
ID ID_ZM NAME NO
---------- ---------- ------- --------
1 12 Dee 333
2 13 Rods 111
table 类型:
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 以获得显示的结果?
您可以将列表 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 查询 table 下面显示的类型 id_pr value.ID_PR 值重复。我想显示 ident_st 列中的所有值,这些值与相同的 id_pr 和 rodz_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
table 订单:
ID ID_ZM NAME NO
---------- ---------- ------- --------
1 12 Dee 333
2 13 Rods 111
table 类型:
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 以获得显示的结果?
您可以将列表 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;