我有带值的表
X Y Z
- --- -
1 abc P
1 def Q
我需要一个普通查询(不是 pl/sql),它可以给出结果
X Y Z
- ------- ---
1 abc,def P,Q
即基于 X 列的值被转换为 csv 格式
可以有超过三列。
我有带值的表
X Y Z
- --- -
1 abc P
1 def Q
我需要一个普通查询(不是 pl/sql),它可以给出结果
X Y Z
- ------- ---
1 abc,def P,Q
即基于 X 列的值被转换为 csv 格式
可以有超过三列。
您可以选择以下任何一种技术来聚合您的字符串
有时需要将多行中的数据聚合到一行中,给出与特定值关联的数据列表。以 SCOTT.EMP 表为例,我们可能想要检索每个部门的员工列表。下面是基础数据列表和我们希望从聚合查询返回的输出类型。
Base Data: DEPTNO ENAME ---------- ---------- 20 SMITH 30 ALLEN 30 WARD 20 JONES 30 MARTIN 30 BLAKE 10 CLARK 20 SCOTT 10 KING 30 TURNER 20 ADAMS 30 JAMES 20 FORD 10 MILLER Desired Output: DEPTNO EMPLOYEES ---------- -------------------------------------------------- 10 CLARK,KING,MILLER 20 SMITH,FORD,ADAMS,SCOTT,JONES 30 ALLEN,BLAKE,MARTIN,TURNER,JAMES,WARD
就个人而言,我发现这种语法非常易读
SELECT x, wm_concat(y), wm_concat(z)
FROM xyz
GROUP BY x;
对于 Postgre,你可以使用类似的东西
select X, array_to_string(array_accum(Y), ',') as Y, array_to_string(array_accum(Z), ',') as Z
from Table
group by X
它的 array_to_string 和 array_accum 是内置函数。